powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / REASSIGN OWNED
4 сообщений из 4, страница 1 из 1
REASSIGN OWNED
    #39677226
SeventhSon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опытные админы PG уже наверняка наступали на эти грабли, когда объекты БД создаются под другим юзером(как правило postgres) а потом юзер, для которого эта БД предназначена, не имеет доступа к таблицам.
В теории знаю что надо писать скрипт и вручную менять владельца всех объектов в БД.

Но вот нашёл в доках такую команду:
REASSIGN OWNED -- change the ownership of database objects owned by a database role
обрадовался, попробовал, понял что рано обрадовался.
Вижу что поменялся только владелец БД, все таблицы внутри БД так и остались принадлежать прежнему юзеру.
Кстати PG-9.5 Ubuntu. (Может на 10 оно работает по-другому?)
В связи с этим вопрос-REASSIGN OWNED всё-таки не работает как ожидалось и не меняет, как заявлено, database objects?
Надо делать как и читал где-то на просторах инета скриптом? Или всё-таки я что-то не так делаю?

Если скриптом то кому не жалко поделитесь пожалуйста.
Как я понимаю, менять владельца нужно у:
1) таблиц (select tablename from pg_tables тут проде ясно)
2) последовательностей (select sequence_name from information_schema.sequences ?)
3) представлений (select table_name from information_schema.views ?)
...
Рейтинг: 0 / 0
REASSIGN OWNED
    #39677540
big-trot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeventhSonВижу что поменялся только владелец БД, все таблицы внутри БД так и остались принадлежать прежнему юзеру.

Страно, постоянно пользуюсь этой командой для того чтобы удалить роль из БД, всё работает штатно.
Нельзя удалить роль, если эта роль владеет объектами в БД.
...
Рейтинг: 0 / 0
REASSIGN OWNED
    #39677563
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeventhSon,

А вы точно внутри этой конкретной DB где владельца сменить надо это команду выполняли?
По тому что вы написали - похоже что извне и получили ожидаемый итог.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
REASSIGN OWNED
    #39678039
Visermoz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeventhSon,
я пользуюсь таким скриптом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
do
$$
declare
	rec record;
	to_user_name varchar(40):='newuser';
begin
        --Схемы
	for rec in(select 'alter schema '||nspname||' owner to '||to_user_name||';' as query from pg_namespace)
	loop
		execute rec.query;
	end loop;
        --Таблицы
	for rec in(SELECT 'ALTER TABLE '|| schemaname || '."' || tablename ||'" OWNER TO '||to_user_name||';' as query FROM pg_tables WHERE NOT schemaname IN ('pg_catalog', 'information_schema'))
	loop
		execute rec.query;
	end loop;
        --Последовательности
	for rec in(SELECT 'ALTER SEQUENCE '|| sequence_schema || '."' || sequence_name ||'" OWNER TO '||to_user_name||';' as query FROM information_schema.sequences WHERE NOT sequence_schema IN ('pg_catalog', 'information_schema'))
	loop
		execute rec.query;
	end loop;
        --Представления
	for rec in(SELECT 'ALTER VIEW '|| table_schema || '."' || table_name ||'" OWNER TO '||to_user_name||';' as query FROM information_schema.views WHERE NOT table_schema IN ('pg_catalog', 'information_schema'))
	loop
		execute rec.query;
	end loop;
        --Материализованные представления
	for rec in(SELECT 'ALTER TABLE '|| oid::regclass::text ||' OWNER TO '||to_user_name||';' as query FROM pg_class WHERE relkind = 'm')
	loop
		execute rec.query;
	end loop;
        --Функции
	for rec in(SELECT 'ALTER FUNCTION '||n.nspname||'.'||p.proname||'('||pg_catalog.pg_get_function_identity_arguments(p.oid)||') OWNER TO '||to_user_name||';' as query
                	FROM pg_catalog.pg_proc p
		             JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
                        where n.nspname NOT IN ('pg_catalog', 'information_schema'))
	loop
		execute rec.query;
	end loop;
end$$;       
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / REASSIGN OWNED
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]