#sql #postgresql #privileges #postgresql-13
Вопрос:
Мы пытались создать множество ролей и пользователей в одной из баз данных. В какой-то момент я столкнулся с этой проблемой, которую мне трудно воспроизвести.
Это воспроизводимо в базе данных, но когда я создаю новую базу данных и пытаюсь сделать то же самое, этого не происходит 🙁
ALTER TABLE public.table_name OWNER TO role_name;
Обычно после выполнения этого запроса. Это table_name
будет owned
role_name
сделано ролью/пользователем.
После выполнения вышеуказанного запроса, если мы выполним приведенный ниже запрос:
select grantee, table_catalog, privilege_type, table_schema, table_name
from information_schema.table_privileges
where table_name = 'table_name'
order by grantee, table_schema, table_name
Мы получим следующие результаты:
role_name | database_name | INSERT | public | table_name
role_name | database_name | DELETE | public | table_name
role_name | database_name | SELECT | public | table_name
role_name | database_name | UPDATE | public | table_name
role_name | database_name | TRUNCATE | public | table_name
role_name | database_name | REFERENCES | public | table_name
role_name | database_name | TRIGGER | public | table_name
Однако в особенно испорченной базе данных (я сожалею о языке, но бог знает, через что я прошел, и я уверен, что на этот раз он извинит меня 😛 ) после того, как я предоставлю право собственности, новая роль становится владельцем, но у нее нет SELECT, INSERT
или каких-либо привилегий в этом отношении.
Итак, мой вопрос таков:
Существует ли какой-либо сценарий, при котором, когда мы назначаем роль владельцем таблицы, роль может быть владельцем, но у нее все еще нет привилегий выбора, вставки, обновления и удаления?
Если да, то когда и почему?
Комментарии:
1. да, «Владелец объекта может отменить свои обычные привилегии, например, чтобы сделать таблицу доступной только для чтения как для себя, так и для других. Но владельцы всегда считаются обладателями всех вариантов предоставления грантов, поэтому они всегда могут повторно предоставить свои собственные привилегии».
2. Спасибо за подробности. Я тоже читал инструкцию. В моем случае привилегия не отменяется. Сразу после предоставления права собственности, когда я проверяю привилегии, разрешение на выбор отсутствует.
3. кто-то лишил вас привилегий по умолчанию postgresql.org/docs/13/sql-alterdefaultprivileges.html
4. @mshabou: «Привилегии по умолчанию» применяются при создании объекта, а не при смене владельца. Другая тема, неприменимая к этому вопросу.
5. Ответ Эрвина дал мне хорошую зацепку, подтвердится завтра. Спасибо @mshabou
Ответ №1:
роль может быть владельцем и по-прежнему не иметь привилегий выбора, вставки, обновления, удаления?
Да. Руководство:
Владелец объекта может отменить свои обычные привилегии, например, чтобы сделать таблицу доступной только для чтения как для себя, так и для других. Но владельцы всегда рассматриваются как обладатели всех вариантов предоставления, поэтому они всегда могут повторно предоставить свои собственные привилегии.
И суперпользователь может делать все, что может сделать владелец.
Хитрая деталь: владелец (или суперпользователь) может REVOKE
получить привилегии от самого себя (владельца). Если затем собственность переходит из рук в руки, новый владелец наследует набор привилегий, которыми обладал предыдущий владелец, плюс любые привилегии, которыми, возможно, уже обладал новый владелец. Таким образом, объединение предыдущих привилегий роли и привилегий владельца. Тогда это новые привилегии владельца.
Если собственность снова перейдет из рук в руки, весь набор привилегий будет передан! Предыдущий владелец теряет все привилегии, которыми он обладал непосредственно.
Но любая роль может наследовать дополнительные привилегии через членство в другой роли или через PUBLIC
привилегии.
Тесно связаны:
Комментарии:
1. В моем случае привилегия не отменяется. Сразу после предоставления права собственности, когда я проверяю привилегии, разрешение на выбор отсутствует.
2. @LunaLovegood: Как я уже писал: если привилегии были отозваны у предыдущего владельца , следующий владелец наследует только уменьшенный набор привилегий. Это вступает в силу сразу после
ALTER TABLE OWNER TO role_name;
этого .3. О, вы имеете в виду предыдущего владельца стола. Хммм, может быть, это и возможно. Позвольте мне проверить. Спасибо, что терпеливо указали на это.
4. @LunaLovegood: Это определенно возможно. Я проверил перед отправкой.
5. Хм, хорошо, позвольте мне подтвердить это. В данный момент подальше от Мака. Первым делом завтра проверим это и должным образом подтвердим этот ответ. Спасибо за помощь. Теперь, когда вы указали на это, я думаю, что это так.