我正在尝试为我正在处理的应用创建受限制的数据库用户,并且希望删除用于实验的Postgres数据库用户。有没有办法让用户不必手动撤销所有权限,或撤销用户拥有的所有权限?PostgreSQL - 如何快速删除具有现有权限的用户
回答
如何
DROP USER <username>
这实际上是DROP ROLE
的别名。
您必须明确地删除与该用户关联的所有特权,并将其所有权移至其他角色(或删除该对象)。
这最好通过
REASSIGN OWNED BY <olduser> TO <newuser>
和
DROP OWNED BY <olduser>
后者实现将删除授予该用户的任何特权。
查看本文的DROP ROLE和the more detailed description的postgres文档。
增加:
显然,试图通过这里提到的命令,如果您正在执行他们,而被连接到原来的赠款,由相同的数据库才起作用删除用户,这里讨论:
另外请注意,如果您已明确授予:
CONNECT ON DATABASE xxx TO GROUP
,
,你将需要从DROP归单独撤销这一点,使用:
REVOKE CONNECT ON DATABASE xxx FROM GROUP
我面临同样的问题,现在找到了一种方法来解决它。 首先你必须删除你想删除的用户的数据库。然后用户可以很容易地删除。
我创建了一个名为“msf”的用户,并挣扎了一段时间来删除用户并重新创建它。我遵循以下步骤,并成功。
1)删除数据库
dropdb msf
2)删除用户
dropuser msf
现在,我得到了用户成功删除。
这是一种令人难以置信的斜线和刻录方法,因为它会要求我为每次迭代工作重新创建数据库模式。 (其中涉及对现有数据库模式具有精细权限;即最好如果数据库模式保持不变)。 – millimoose 2015-12-09 22:54:08
接受的答案在尝试重新分配所有权或所有权时会导致错误。以下为我工作:
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线。要显示所有的模式和特权类型的用户,我编辑\ DP命令,使这个查询:
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. 如何删除用户的“CreateDB”权限?
- 2. 具有权限的角色,但也添加/删除个人用户的权限
- 3. 如何限制快速应用程序中的用户权限?
- 4. 公用文件夹删除所有用户的所有权限
- 5. TFS2012权限:我如何删除用户?
- 6. 如何创建具有LDAP限制权限的LDAP用户
- 7. 具有根权限的用户
- 8. 有限的备份权postgresql
- 9. 如何用xCode快速删除所有未使用的变量?
- 10. 创建具有有限权限的db用户
- 11. 显示具有具体用户的所有权限[Postgres]
- 12. 在所有子目录中删除用户的NTFS权限
- 13. Braintree,如何从客户端删除具有现时的用户信用卡?
- 14. 如何使用SubInAcl.exe删除目录的所有继承权限?
- 15. 如何创建具有权限的linux用户
- 16. 发现用户是否具有管理权限
- 17. 获取哪些用户具有管理员权限的帐户(具有OAuthV2访问权限)的API是什么?
- 18. 的PowerShell:删除一个目录下的所有权限的所有用户
- 19. 禁用快速用户切换Vista和7没有管理员权限?
- 20. 如何快速删除emacs命令行中的所有文本?
- 21. 删除所有目录权限
- 22. 如何在PostgreSQL中删除多个具有外键的表?
- 23. 如何生成具有继承权限和权限的进程
- 24. 删除的删除权限的所有Django管理模式
- 25. 创建具有所有权限的用户,但授予
- 26. Mysql查询找到具有所有给定权限的用户
- 27. 注册表更改权限删除其他用户权限
- 28. 如何删除没有人权限的文件夹?
- 29. 加快具有删除加入
- 30. 快速删除plist
正在操作: CREATE TABLE foo(bar SERIAL); ALTER TABLE foo所有者postgres; CREATE USER testuser; GRANT ALL foo TO testuser; DROP USER testuser' 给出了错误消息:'错误:角色“testuser”不能被删除,因为一些对象依赖于它。细节:访问表foo'。 但是,'testopenned by testuser'完成了这个伎俩,显然Postgres认为授予是可丢弃的对象。 – millimoose 2010-06-14 10:39:09
请澄清一下@Tim Kane和millimoose:如果我选择FOO给TESTUSER,然后DROP OWNED BY TESTUSER,我真的不希望原始表被删除。我想你说的是DROP OWNED BY只是放弃了赠款,但不会放弃授予的目标。正确? – 2014-12-01 13:53:36
Andrew,最好阅读说明文档。 DROP OWNED BY *将*删除该用户拥有的表。 REASSIGN OWNED BY会将这些表格重新分配给不同的用户。选一个。 – 2015-02-09 09:16:53