查看数据库
在GaussDB中,如何查询一个用户对某个数据库的权限(比如能否连接数据库A,能否在数据库B中创建表)?
--先创建一个数据 gaussdb=# CREATE DATABASE dn_20; CREATE DATABASE
复制
再进入该数据库创建数据对象
-- 进入数据库后创建数据对象 dn_20=> CREATE TABLE tbl_t1 AS SELECT * FROM pg_class LIMIT 20; INSERT 0 20 dn_20=> \d List of relations Schema | Name | Type | Owner | Storage --------+--------+-------+-------+---------------------------------- public | tbl_t1 | table | root | {orientation=row,compression=no}
复制
再创建一个用户,并授权CONNECT,CREATE的权限:
dn_20=> CREATE USER user01 PASSWORD 'user01@1234'; CREATE ROLE -- 做简单的授权 CREATE CONNECT,CREATE ON DATABASE dn_20 TO user01;
复制
通过pg_database表中datacl的这一列,可以看到该数据库的访问权限
gaussdb=# select datname,datacl from pg_database where datname='dn_20'; datname | datacl ---------+--------------------------------------------------------- dn_20 | {=Tc/rdsAdmin,rdsAdmin=CTc/rdsAdmin,user01=Cc/rdsAdmin} (1 row)
复制
但是这样很不直观,可以使用aclexplode这个函数
gaussdb=# select datname,aclexplode(datacl) from pg_database where datname='dn_20'; datname | aclexplode ---------+---------------------- dn_20 | (10,0,TEMPORARY,f) dn_20 | (10,0,CONNECT,f) dn_20 | (10,10,CREATE,f) dn_20 | (10,10,TEMPORARY,f) dn_20 | (10,10,CONNECT,f) dn_20 | (10,40975,CREATE,f) dn_20 | (10,40975,CONNECT,f) --- 继续展开 gaussdb=# select datname,aclexplode(datacl).grantee, aclexplode(datacl).privilege_type from pg_database where datname='dn_20'; datname | grantee | privilege_type ---------+---------+---------------- dn_20 | 0 | TEMPORARY dn_20 | 0 | CONNECT dn_20 | 10 | CREATE dn_20 | 10 | TEMPORARY dn_20 | 10 | CONNECT dn_20 | 40975 | CREATE dn_20 | 40975 | CONNECT
复制
其中,grantee就是用户的oid,因此就能通过这个字段来关联用户表
SELECT pr.rolname,t.* FROM (select datname,aclexplode(datacl).grantee, aclexplode(datacl).privilege_type from pg_database )t,pg_roles pr WHERE t.grantee=pr.oid and t.datname='dn_20'; rolname | datname | grantee | privilege_type ----------+---------+---------+---------------- rdsAdmin | dn_20 | 10 | CREATE rdsAdmin | dn_20 | 10 | TEMPORARY rdsAdmin | dn_20 | 10 | CONNECT user01 | dn_20 | 40975 | CREATE user01 | dn_20 | 40975 | CONNECT
复制
这样就能看到用户对数据库所拥有的权限
查看模式的权限
同理也可以看到用户对schema的权限
-- 在数据库里创建schema dn_20=> CREATE SCHEMA test20; CREATE SCHEMA dn_20=> GRANT USAGE ON SCHEMA test20 TO user01; GRANT
复制
使用aclexplode函数得出具体权限
SELECT pr.rolname,t.* FROM (select nspname,aclexplode(nspacl).privilege_type,aclexplode(nspacl).grantee from pg_namespace) t,pg_roles pr WHERE t.grantee=pr.oid AND t.nspname='test20'; rolname | nspname | privilege_type | grantee ---------+---------+----------------+--------- root | test20 | USAGE | 16776 root | test20 | CREATE | 16776 user01 | test20 | USAGE | 40975
复制
最后修改时间:2025-03-23 20:35:52
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1391次阅读
2025-04-09 15:33:27
2025年3月国产数据库大事记
墨天轮编辑部
750次阅读
2025-04-03 15:21:16
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
546次阅读
2025-04-10 15:35:48
PostgreSQL初/中/高级认证考试(3.15)通过考生公示
开源软件联盟PostgreSQL分会
402次阅读
2025-03-20 09:50:36
9.9 分高危漏洞,尽快升级到 pgAdmin 4 v9.2 进行修复
严少安
312次阅读
2025-04-11 10:43:23
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
307次阅读
2025-04-15 14:48:05
北京市公安局数据库大单:华为云GaussDB 1427万、金仓数据库 510万!
通讯员
251次阅读
2025-04-11 12:33:24
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
248次阅读
2025-04-07 12:14:29
IvorySQL 4.4 发布 - 基于 PostgreSQL 17.4,增强平台支持
通讯员
237次阅读
2025-03-20 15:31:04
内蒙古公司成功完成新一代BOSS云原生系统割接上线
openGauss
213次阅读
2025-03-24 09:40:40