Я пытаюсь сделать ограниченных пользователей БД для приложения, над которым я работаю, и хочу удалить пользователя базы данных Postgres, который я использую для экспериментов. Есть ли способ отбросить пользователя без необходимости сначала аннулировать все его права вручную или аннулировать все гранты, которые пользователь имеет?
PostgreSQL - как быстро удалить пользователя с существующими привилегиями
Ответ 1
Как насчет
DROP USER <username>
На самом деле это псевдоним для DROP ROLE
.
У вас должно быть простое исключение любых привилегий, связанных с этим пользователем, а также переместить его право собственности на другие роли (или удалить объект).
Это лучше всего достигается
REASSIGN OWNED BY <olduser> TO <newuser>
и
DROP OWNED BY <olduser>
Последний удалит все привилегии, предоставленные пользователю.
Смотрите документы postgres для DROP ROLE и более подробное описание этого.
Дополнение:
По-видимому, попытка сбросить пользователя с помощью упомянутых здесь команд будет работать, только если вы выполняете их при подключении к той же базе данных, из которой были сделаны оригинальные GRANTS, как описано здесь:
Ответ 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
Теперь я успешно удалил пользователя.