Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / REASSIGN OWNED / 4 сообщений из 4, страница 1 из 1
21.07.2018, 13:13
    #39677226
SeventhSon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REASSIGN OWNED
Опытные админы 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
23.07.2018, 10:43
    #39677540
big-trot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REASSIGN OWNED
SeventhSonВижу что поменялся только владелец БД, все таблицы внутри БД так и остались принадлежать прежнему юзеру.

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

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


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
24.07.2018, 08:09
    #39678039
Visermoz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REASSIGN OWNED
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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / REASSIGN OWNED / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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