Я пытаюсь сделать ограниченных пользователей БД для приложения, над которым я работаю, и хочу удалить пользователя базы данных Postgres, который я использую для экспериментов. Есть ли способ отбросить пользователя без необходимости сначала аннулировать все его права вручную или аннулировать все гранты, которые есть у пользователя?PostgreSQL - как быстро отбросить пользователя с существующими привилегиями
ответ
Как насчет
DROP USER <username>
Это на самом деле псевдоним для DROP ROLE
.
Вы должны портить любые привилегии, связанные с этим пользователем, а также переместить его право собственности на другие роли (или удалить объект).
Это лучше всего достигается за счет
REASSIGN OWNED BY <olduser> TO <newuser>
и
DROP OWNED BY <olduser>
Последние будут удалять любые привилегии, предоставленные пользователю.
См. Документы postgres для DROP ROLE и the more detailed description.
Дополнение
Видимо, пытаясь удалить пользователя с помощью команд, упомянутых здесь будет работать только если вы выполняете их, будучи подключены к одной и той же базе данных, что первоначальные ГРАНТЫ были сделаны из, как описано здесь:
также обратите внимание, если вы явно предоставлены:
CONNECT ON DATABASE xxx TO GROUP
,
вам нужно будет отменить это отдельно от DROP, находящихся в собственности, используя:
REVOKE CONNECT ON DATABASE xxx FROM GROUP
я столкнулся с той же проблемой, и теперь нашел способ решить эту проблему. Сначала вам нужно удалить базу данных пользователя, которую вы хотите удалить. Тогда пользователь может быть легко удален.
Я создал пользователя с именем msf и попытался удалить пользователя и восстановить его. Я последовал за нижеследующими шагами, и Got преуспел.
1) Отбросьте базу данных
dropdb msf
2) падение пользователя
dropuser msf
Теперь я получил пользователь успешно упал.
Этот подход невероятно слэш-и-ожог, так как он потребовал бы, чтобы я заново создавал схему базы данных для каждой итерации моей работы. (Это связано с наличием мелкомасштабных разрешений для существующей схемы базы данных, то есть лучше всего, если схема базы данных остается нетронутой.) – millimoose
Принятый ответ привел к ошибкам для меня при попытке ЗАПИСАТЬСЯ СОБСТВЕННЫМ ИЛИ ПОТЕРЯНЫМ СОБСТВЕННЫМ.Следующие работал для меня:
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM username;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM username;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM username;
DROP USER username;
пользователь может иметь привилегии в других схемах, в этом случае вам придется запустить соответствующую REVOKE линию «общественного» заменить на правильную схему. Для того, чтобы показать все схемы и типов привилегий для пользователя, я редактировал команду \ дп, чтобы сделать этот запрос:
SELECT
n.nspname as "Schema",
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'm' THEN 'materialized view'
WHEN 'S' THEN 'sequence'
WHEN 'f' THEN 'foreign table'
END as "Type"
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.array_to_string(c.relacl, E'\n') LIKE '%username%';
я не уверен, какие типы привилегий соответствуют отменив на ТАБЛИЦЫ, ПОСЛЕДОВАТЕЛЬНОСТИ, или функции, но я думаю, что все они подпадают под одну из трех.
- 1. Вилка с привилегиями пользователя/правами
- 2. Как создать пользователя linux с привилегиями
- 3. Невозможно отбросить пользователя
- 4. Управление привилегиями пользователя в Codeigniter
- 5. Ansible: создать пользователя с привилегиями sudo
- 6. Как сделать один пользователь postgresql с привилегиями только выполнять функции
- 7. FOSUserBundle автоматически аутентифицирует пользователя с привилегиями SUPER_ADMIN
- 8. Создать нового пользователя с существующими данными
- 9. CreateProcessAsUser с повышенными привилегиями
- 10. Как создать учетную запись пользователя predixmachineuser с ограниченными привилегиями
- 11. Как заставить пользователя запускать команду с привилегиями sudo
- 12. Управление привилегиями пользователя при использовании VLine
- 13. Открыть с правами администратора из командной строки с привилегиями пользователя
- 14. Как быстро вставить BLOB в PostgreSQL?
- 15. Как быстро переключиться на пользователя
- 16. Как выполнить быстро присоединиться на PostgreSQL
- 17. Преобразование столбца с существующими данными в другой тип в postgresql
- 18. WSHShell.ExpandEnvironmentStrings с ограниченными привилегиями
- 19. Directory.SetCurrentDirectory с привилегиями администратора.
- 20. сценарий оболочки для добавления пользователя postgres с привилегиями суперпользователя
- 21. Скопировать файл с повышенными привилегиями
- 22. Загрузка файла с привилегиями
- 23. FormView не может заполнить существующими данными пользователя
- 24. Отбросить все последовательности SqlAlchemy
- 25. Расчет пользователя маслобойки с Postgresql
- 26. Как заставить Postgresql Логин пользователя с паролем
- 27. Запуск Powershell с повышенными привилегиями
- 28. Как создать миграцию с существующими данными?
- 29. android получение фотографий пользователя профиля пользователя быстро
- 30. Создать поток с конкретными привилегиями C++
Выполнение: 'CREATE TABLE foo (bar SERIAL); ALTER TABLE foo ВЛАДЕЛЕЦ В postgres; CREATE USER testuser; GRANT ALL ON foo TO testuser; DROP USER testuser' дал сообщение об ошибке: 'ERROR: роль" testuser "не может быть удалена, потому что некоторые объекты зависят от него. DETAIL: доступ к таблице foo'. Тем не менее, 'DROP OWNED BY testuser' сделал трюк, очевидно, Postgres считает, что гранты являются недоступными объектами. – millimoose
Просьба пояснить, @Tim Kane и millimoose: я действительно не хочу, чтобы исходные таблицы были удалены, если я ПРЕДОСТАВЛЯЕТ ВЫБРАТЬ НА FOO TO TESTUSER, а затем DROP OWNED BY TESTUSER. Я думаю, вы говорите, что DROP OWNED BY просто отбрасывает гранты, но не отбрасывает объект, на который был сделан грант. Верный? –
Andrew, лучше всего ознакомиться с документацией для уточнения. DROP OWNED BY * будет * удалять таблицы, принадлежащие этому пользователю. REASSIGN OWNED BY переназначает эти таблицы другому пользователю. Выбери один. –