PostgreSQL - как быстро удалить пользователя с существующими привилегиями

Я пытаюсь сделать ограниченных пользователей БД для приложения, над которым я работаю, и хочу удалить пользователя базы данных Postgres, который я использую для экспериментов. Есть ли способ отбросить пользователя без необходимости сначала аннулировать все его права вручную или аннулировать все гранты, которые пользователь имеет?

Ответ 1

Как насчет

DROP USER <username>

На самом деле это псевдоним для DROP ROLE.

У вас должно быть простое исключение любых привилегий, связанных с этим пользователем, а также переместить его право собственности на другие роли (или удалить объект).

Это лучше всего достигается

REASSIGN OWNED BY <olduser> TO <newuser>

и

DROP OWNED BY <olduser>

Последний удалит все привилегии, предоставленные пользователю.

Смотрите документы postgres для DROP ROLE и более подробное описание этого.


Дополнение:

По-видимому, попытка сбросить пользователя с помощью упомянутых здесь команд будет работать, только если вы выполняете их при подключении к той же базе данных, из которой были сделаны оригинальные GRANTS, как описано здесь:

https://www.postgresql.org/message-id/83894A1821034948BA27FE4DAA47427928F7C29922%40apde03.APD.Satcom.Local

Ответ 2

Также обратите внимание, если вы явно предоставили:

CONNECT ON DATABASE xxx TO GROUP,

вам нужно будет отменить это отдельно от DROP OWNED BY, используя:

REVOKE CONNECT ON DATABASE xxx FROM GROUP

Ответ 3

У меня возникла такая же проблема, и теперь я нашел способ ее решить. Сначала вам нужно удалить базу данных пользователя, которую вы хотите удалить. Затем пользователь может быть легко удален.

Я создал пользователя с именем msf и некоторое время пытался удалить пользователя и воссоздать его. Я выполнил следующие шаги, и Got преуспел.

1) Отбросить базу данных

dropdb msf

2) отпустите пользователя

dropuser msf

Теперь я успешно удалил пользователя.