我有以下postgres用户,我可以通过在终端中调用\ du命令来查看,如下所示:
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication | {}
tutorial1 | | {}
Run Code Online (Sandbox Code Playgroud)
根据postgres文档,我应该能够通过输入以下命令来删除名为"tutorial1"的用户:
postgres=# DROP USER tutorial1
Run Code Online (Sandbox Code Playgroud)
但是,当我使用该命令时没有任何反应.该文档没有提供任何关于它为什么不起作用的提示,也没有提供明确的示例.
那就是说 - 放弃这个用户的命令是什么?
Sas*_*ser 19
如果您发现自己(像我一样)因为您无法删除用户,以下模板可能会有所帮助:
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM tutorial1;
DROP USER tutorial1;
Run Code Online (Sandbox Code Playgroud)
用户可能拥有其他模式的权限,在这种情况下,您必须运行相应的REVOKE行,并将"public"替换为正确的模式.要显示用户的所有模式和权限类型,我编辑了\ 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 '%postgres%';
Run Code Online (Sandbox Code Playgroud)
我不确定哪些特权类型对应于在TABLES,SEQUENCES或FUNCTIONS上撤销,但我认为它们都属于三者之一.
Pat*_*era 19
我浪费了太多时间试图找到所有要放松的东西.除了以上(或可能作为完整替代),请参阅类似问题的答案:https://stackoverflow.com/a/11750309/647581
DROP OWNED BY your_user;
DROP USER your_user;
Run Code Online (Sandbox Code Playgroud)
为我做了诀窍
Shu*_*aha 17
你的命令没问题,但你忘了把它放在;命令的末尾.
试试这样吧
postgres=# DROP USER tutorial1; (Note I put semicolon at the end)
Run Code Online (Sandbox Code Playgroud)
首先在Ubuntu终端操作:
$ sudo -su postgres
$ psql postgres
Run Code Online (Sandbox Code Playgroud)
然后在postgres终端:
# \du
# drop user 'user_name';
# \du
Run Code Online (Sandbox Code Playgroud)
[ 注意 ]:
不要忘记分号 ";"
Timofey 的答案几乎对我有用,但我还需要撤销架构级别的权限。所以我的放置脚本如下所示:
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM tutorial1;
REVOKE ALL PRIVILEGES ON SCHEMA public FROM tutorial1;
DROP USER tutorial1;
Run Code Online (Sandbox Code Playgroud)
因此,撤销可能需要在此处发生的任何级别上进行: https://www.postgresql.org/docs/9.1/static/sql-revoke.html
编辑:
再次尝试此操作时出现错误
错误:无法删除角色,因为某些对象依赖于它
所以我必须将此答案中的代码添加到我的脚本中 /sf/answers/3588014251/
| 归档时间: |
|
| 查看次数: |
39885 次 |
| 最近记录: |