Jay*_*esh 2 postgresql amazon-rds psql
我有 postgres 数据库。我想要分配给他们访问权限的用户列表。
我试图查找查询并查看 psql 命令行帮助。(\nu 和所有) 但我没有找到任何有用的信息。
有没有人知道可以帮助我。
谢谢。
小智 10
很少有像 \du 和 \l 这样的基本命令可以提供一般信息。
要获取详细信息,您可以使用以下功能。
CREATE OR REPLACE FUNCTION database_privs(text) RETURNS table(username text,dbname name,privileges text[])
AS
$$
SELECT $1, datname, array(select privs from unnest(ARRAY[
( CASE WHEN has_database_privilege($1,c.oid,'CONNECT') THEN 'CONNECT' ELSE NULL END),
(CASE WHEN has_database_privilege($1,c.oid,'CREATE') THEN 'CREATE' ELSE NULL END),
(CASE WHEN has_database_privilege($1,c.oid,'TEMPORARY') THEN 'TEMPORARY' ELSE NULL END),
(CASE WHEN has_database_privilege($1,c.oid,'TEMP') THEN 'CONNECT' ELSE NULL END)])foo(privs) WHERE privs IS NOT NULL) FROM pg_database c WHERE
has_database_privilege($1,c.oid,'CONNECT,CREATE,TEMPORARY,TEMP') AND datname not in ('template0');
$$ language sql;
Run Code Online (Sandbox Code Playgroud)
然后通过提供从 \du 获得的用户名/角色来调用相同的函数
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
test | | {}
test2 | | {}
test3 | | {}
postgres=# select * from database_privs('test');
username | dbname | privileges
----------+-----------+-----------------------------
test | postgres | {CONNECT,TEMPORARY,CONNECT}
test | template1 | {CONNECT}
test | test | {CONNECT,TEMPORARY,CONNECT}
(3 rows)
Run Code Online (Sandbox Code Playgroud)
小智 8
这里作为对前文的补充。
要检查用户的权限,请执行以下操作:
SELECT * FROM pg_user;
Run Code Online (Sandbox Code Playgroud)
以同样的方式,检查角色:
SELECT * FROM pg_roles;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7463 次 |
| 最近记录: |