mar*_*kus 82 sql postgresql grant
如何在postgres中查询授予对象的所有GRANTS?
例如,我有表"mytable":
GRANT SELECT, INSERT ON mytable TO user1
GRANT UPDATE ON mytable TO user2
Run Code Online (Sandbox Code Playgroud)
我需要一些能给我的东西:
user1: SELECT, INSERT
user2: UPDATE
Run Code Online (Sandbox Code Playgroud)
CPJ*_*CPJ 92
\z mytable
从psql中获取表格中的所有授权,但您必须由个别用户将其拆分.
mar*_*kus 92
我已经找到了:
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='mytable'
Run Code Online (Sandbox Code Playgroud)
Nic*_*art 28
如果你真的想要每个用户一行,你可以按受让人分组(要求PG9 +用于string_agg)
SELECT grantee, string_agg(privilege_type, ', ') AS privileges
FROM information_schema.role_table_grants
WHERE table_name='mytable'
GROUP BY grantee;
Run Code Online (Sandbox Code Playgroud)
这应该输出如下:
grantee | privileges
---------+----------------
user1 | INSERT, SELECT
user2 | UPDATE
(2 rows)
Run Code Online (Sandbox Code Playgroud)
小智 24
请尝试以下查询.它将为您提供表中所有用户及其权限的列表.
select a.tablename,b.usename,HAS_TABLE_PRIVILEGE(usename,tablename, 'select') as select,
HAS_TABLE_PRIVILEGE(usename,tablename, 'insert') as insert,
HAS_TABLE_PRIVILEGE(usename,tablename, 'update') as update,
HAS_TABLE_PRIVILEGE(usename,tablename, 'delete') as delete,
HAS_TABLE_PRIVILEGE(usename,tablename, 'references') as references from pg_tables a , pg_user b
where a.tablename='your_table_name';
Run Code Online (Sandbox Code Playgroud)
此查询将列出所有数据库和模式中的所有表(取消注释WHERE
子句中的行以过滤特定数据库,模式或表),并按顺序显示权限,以便于查看是否容易查看是否授予特定权限:
SELECT grantee
,table_catalog
,table_schema
,table_name
,string_agg(privilege_type, ', ' ORDER BY privilege_type) AS privileges
FROM information_schema.role_table_grants
WHERE grantee != 'postgres'
-- and table_catalog = 'somedatabase' /* uncomment line to filter database */
-- and table_schema = 'someschema' /* uncomment line to filter schema */
-- and table_name = 'sometable' /* uncomment line to filter table */
GROUP BY 1, 2, 3, 4;
Run Code Online (Sandbox Code Playgroud)
样本输出:
grantee |table_catalog |table_schema |table_name |privileges |
--------|----------------|--------------|---------------|---------------|
PUBLIC |adventure_works |pg_catalog |pg_sequence |SELECT |
PUBLIC |adventure_works |pg_catalog |pg_sequences |SELECT |
PUBLIC |adventure_works |pg_catalog |pg_settings |SELECT, UPDATE |
...
Run Code Online (Sandbox Code Playgroud)
添加到@shruti的答案
查询给定用户的架构中所有表的授权
select a.tablename,
b.usename,
HAS_TABLE_PRIVILEGE(usename,tablename, 'select') as select,
HAS_TABLE_PRIVILEGE(usename,tablename, 'insert') as insert,
HAS_TABLE_PRIVILEGE(usename,tablename, 'update') as update,
HAS_TABLE_PRIVILEGE(usename,tablename, 'delete') as delete,
HAS_TABLE_PRIVILEGE(usename,tablename, 'references') as references
from pg_tables a,
pg_user b
where schemaname='your_schema_name'
and b.usename='your_user_name'
order by tablename;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
89850 次 |
最近记录: |