Od wersji 3.8 w systemie eDokumenty następuje sprawdzanie właściciela tabeli. W starszych wersjach był to postgres obecnie powinien być edokumenty.
Przed przystąpieniem do aktualizacji systemu eDokumenty ze starszych wersji powinniśmy sprawdzić właściciela tabeli.
Wykonujemy to poleceniem:
\dS
Jeśli właścicielem tabeli, widoków są edokumenty nie musimy wykonywać żadnych dodatkowych czynności. W przeciwnym wypadku należy zmienić właściciela na edokumnety Aby to wykonać wykonujemy poniższe zapytania. Zapytania wykonujemy pojedzyńczo z uwagi gdyż przy hurtowym zapytaniu mogą się nie wykonać.
create or replace function my_exec1(text) returns void as $$ begin execute $1; end; $$ language plpgsql;
SELECT my_exec1('ALTER SCHEMA ' || aa || ' OWNER TO edokumenty') FROM bs_unnest(array['public', 'syncml_server', 'reports', 'vindication', 'cregisters', 'custom', 'jet_search', 'sekap', 'translatica']) aa; SELECT my_exec1('GRANT USAGE ON SCHEMA ' || aa || ' TO http') FROM bs_unnest(array['public', 'syncml_server', 'reports', 'vindication', 'cregisters', 'custom', 'jet_search', 'sekap', 'translatica']) aa;
SELECT my_exec1('ALTER TABLE ' || table_schema || '.' || table_name || ' OWNER TO edokumenty') FROM information_schema.views WHERE table_schema IN ('public', 'syncml_server', 'reports', 'vindication', 'cregisters', 'custom', 'jet_search', 'sekap', 'translatica'); SELECT my_exec1('GRANT SELECT ON ' || table_schema || '.' || table_name || ' TO http') FROM information_schema.views WHERE table_schema IN ('public', 'syncml_server', 'reports', 'vindication', 'cregisters', 'custom', 'jet_search', 'sekap', 'translatica');
select my_exec1('ALTER TABLE ' || schemaname || '.' || tablename || ' OWNER TO edokumenty') from pg_tables where schemaname IN ('public', 'syncml_server', 'reports', 'vindication', 'cregisters', 'custom', 'jet_search', 'sekap', 'translatica'); select my_exec1('GRANT select, insert, update, delete ON ' || schemaname || '.' || tablename || ' to http') from pg_tables where schemaname IN ('public', 'syncml_server', 'reports', 'vindication', 'cregisters', 'custom', 'jet_search', 'sekap', 'translatica');
SELECT my_exec1('ALTER TABLE ' || sequence_schema || '.' || sequence_name || ' OWNER TO edokumenty') FROM information_schema.sequences WHERE sequence_schema IN ('public', 'syncml_server', 'reports', 'vindication', 'cregisters', 'custom', 'jet_search', 'sekap', 'translatica'); SELECT my_exec1('GRANT USAGE ON SEQUENCE ' || sequence_schema || '.' || sequence_name || ' TO http') FROM information_schema.sequences WHERE sequence_schema IN ('public', 'syncml_server', 'reports', 'vindication', 'cregisters', 'custom', 'jet_search', 'sekap', 'translatica');
drop function my_exec1(text);
Jeżeli chcemy ustawić uprawnienia do bazy dla danego użytkownika, to należy wykonać następujące operacje:
-- Usunięcie uprawnienia: REVOKE CONNECT ON DATABASE edokumenty FROM PUBLIC; -- Dodanie uprawnienia GRANT CONNECT ON DATABASE edokumenty TO uzytkownik;
-- Usuwanie uprawnień REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC; -- Dodawanie uprawnień GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO uzytkownik;
ALTER DEFAULT PRIVILEGES FOR ROLE uzytkownik -- alternatywnie "FOR USER" IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO uzytkownik;