Удаление ролей
Эта страница переведена при помощи нейросети GigaChat.
Поскольку роли могут владеть объектами базы данных и получать привилегии для доступа к другим объектам, удаление роли — это не просто быстрый вызов команды DROP ROLE
. Сначала необходимо избавиться от всех объектов, принадлежащих этой роли, или передать их другим владельцам, а также отозвать выданные ей разрешения.
Передача владения объектами осуществляется постепенно с помощью команды ALTER
, например:
ALTER TABLE bobs_table OWNER TO alice;
Альтернативный подход — использовать команду REASSIGN OWNED
, которая позволяет переоформить право собственности на все объекты, принадлежащие удаляемой роли, на другую роль. Так как REASSIGN OWNED
не видит объекты в других базах данных, ее нужно запускать в каждой базе, где есть объекты, принадлежащие данной роли. Первая команда изменит владение общими объектами, такими как базы данных или табличные пространства, если они находятся в ведении удаляемой роли.
Когда важные объекты переданы новым владельцам, оставшиеся объекты удаляемой роли можно уничтожить командой DROP OWNED
. Как и в предыдущем случае, эта команда не распространяется на другие базы данных, поэтому ее тоже нужно выполнять в каждой базе, содержащей объекты удаляемой роли. Команде DROP OWNED
также придется вручную удалять базы данных и табличные пространства, если они принадлежат удаляемой роли и не были переведены новым владельцем.
Кроме того, DROP OWNED
снимает все права доступа, предоставленные удаляемой роли на объекты, которыми она не владела. Так как REASSIGN OWNED
не влияет на такие объекты, для полной очистки от следов удаляемой роли обычно приходится запускать обе команды (REASSIGN OWNED
и DROP OWNED
) последовательно.
Итак, общий порядок действий для удаления роли, которая владеет объектами, выглядит так:
REASSIGN OWNED BY doomed_role TO successor_role;
DROP OWNED BY doomed_role;
-- repeat the above commands in each database of the cluster
DROP ROLE doomed_role;
Если объекты, принадлежащие удаляемой роли, необходимо распределить разным новым владельцам, удобнее сначала вручную решить особые случаи, а затем продолжить очистку по стандартной схеме.
Если попытаться выполнить команду DROP ROLE
, оставив зависимые объекты, система выведет сообщение с указанием, какие объекты требуется перенести или удалить.