Как насчет
DROP USER <username>
На самом деле это псевдоним для DROP ROLE
.
Вы должны явно отказаться от любых привилегий, связанных с этим пользователем, а также передать его право собственности другим ролям (или удалить объект).
Лучше всего это достигается
REASSIGN OWNED BY <olduser> TO <newuser>
и
DROP OWNED BY <olduser>
Последний удалит любые привилегии, предоставленные пользователю.
См. Документацию postgres для DROP ROLE и более подробное описание этого.
Дополнение:
По-видимому, попытка отбросить пользователя с помощью упомянутых здесь команд будет работать только в том случае, если вы выполняете их, будучи подключенными к той же базе данных, из которой были сделаны исходные ГРАНТЫ, как обсуждается здесь:
https://www.postgresql.org/message-id/83894A1821034948BA27FE4DAA47427928F7C29922%40apde03.APD.Satcom.Local
CREATE TABLE foo(bar SERIAL); ALTER TABLE foo OWNER TO postgres; CREATE USER testuser; GRANT ALL ON foo TO testuser; DROP USER testuser
дали сообщения об ошибках:ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo
. ОднакоDROP OWNED BY testuser
свое дело сделал, видимо, Постгрес считает гранты удаляемыми объектами.Принятый ответ привел к ошибкам при попытке REASSIGN OWNED BY или DROP OWNED BY. У меня сработало следующее:
Пользователь может иметь привилегии в других схемах, и в этом случае вам нужно будет запустить соответствующую строку REVOKE, заменив «public» на правильную схему. Чтобы показать все схемы и типы привилегий для пользователя, я отредактировал команду \ dp, чтобы сделать этот запрос:
Я не уверен, какие типы привилегий соответствуют аннулированию для ТАБЛИЦ, ПОСЛЕДОВАТЕЛЬНОСТЕЙ или ФУНКЦИЙ, но я думаю, что все они подпадают под одну из трех.
источник
REVOKE ALL PRIVILEGES ON DATABASE db_name FROM username;
revoke USAGE on SCHEMA some_schema from username;
Также обратите внимание, если вы явно предоставили:
CONNECT ON DATABASE xxx TO GROUP
,вам нужно будет отозвать это отдельно от DROP OWNED BY, используя:
REVOKE CONNECT ON DATABASE xxx FROM GROUP
источник
Пришлось добавить еще одну строчку в REVOKE ...
После запуска:
Я все еще получаю сообщение об ошибке: имя пользователя не может быть удалено, потому что некоторые объекты зависят от него. ДЕТАЛИ: привилегии для схемы public
Мне не хватало этого:
Потом я смог отказаться от роли.
источник
Вот что наконец сработало для меня:
источник
Нет
REVOKE ALL PRIVILEGES ON ALL VIEWS
, поэтому я закончил:и обычно:
для достижения успеха:
источник
В командной строке
dropuser
доступна команда для удаления пользователя из postgres.источник
Я столкнулся с той же проблемой и теперь нашел способ ее решить. Сначала вам нужно удалить базу данных пользователя, которого вы хотите удалить. Тогда пользователя можно будет легко удалить.
Я создал пользователя с именем «msf» и некоторое время пытался удалить пользователя и воссоздать его. Я выполнил следующие шаги, и мне это удалось.
1) Отбросить базу данных
2) отпустите пользователя
Теперь у меня пользователь успешно сбросился.
источник