АннотацияВ инструкции приведена краткая последовательность действий по изменению владельца объектов базы данных (далее - БД) с одной ролевой группы на другую. |
Изменение владельца объектов БД
|
Для безопасной смены владельца объектов БД на ролевую группу «as_admin» нужно:
postgres:sudo -u postgres psql |
psql, подключиться от имени сервисной учетной записи:postgres=# \c termidesk |
где:
termidesk - имя сервисной учетной записи;
SELECT tablename, tableowner FROM pg_tables WHERE schemaname = 'public'; |
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO as_admin; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO as_admin; GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO as_admin; |
SELECT usename FROM pg_stat_activity; |
ALTER ROLE termidesk INHERIT FROM as_admin; |
где:
termidesk - имя сервисной учетной записи;
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'public') LOOP
EXECUTE 'ALTER TABLE ' || quote_ident(r.tablename) || ' OWNER TO as_admin;';
END LOOP;
END $$; |
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN (SELECT sequencename FROM pg_sequences WHERE schemaname = 'public') LOOP
EXECUTE 'ALTER SEQUENCE ' || quote_ident(r.sequencename) || ' OWNER TO as_admin;';
END LOOP;
END $$; |
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN (SELECT routine_name FROM information_schema.routines WHERE routine_schema = 'public') LOOP
EXECUTE 'ALTER FUNCTION ' || quote_ident(r.routine_name) || ' OWNER TO as_admin;';
END LOOP;
END $$; |
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN (SELECT table_name FROM information_schema.views WHERE table_schema = 'public') LOOP
EXECUTE 'ALTER VIEW ' || quote_ident(r.table_name) || ' OWNER TO as_admin;';
END LOOP;
END $$; |
выйти из интерактивного интерфейса терминального клиента СУБД PostgreSQL:
postgres=# \q |
postgres:exit |
termidesk-vdi:sudo systemctl restart termidesk-vdi.service |
termidesk-vdi:systemctl status termidesk-vdi.service |