当前位置: 首页 > news >正文

GaussDB 中 alter default privileges 的使用示例(下)

在 《GaussDB中 alter default privileges 的使用示例(上)》 中,对alter default privileges的作用及语法做了介绍,本文,将继续通过使用示例来做进一步的说明。

第三章 使用示例

3.1 示例1:使用初始用户授权,不指定SCHEMA

使用数据库初始用户(默认是gaussdb)操作,允许user2用户,访问user1用户中已经存在的表(包含视图),以及未来创建的表(包含视图)。

1、 清理环境,避免影响

图片.png

2、 创建user1,user2,并允许user2访问user1中此后创建的表和视图。

图片.png

3、 在user1中创建表及视图

图片.png

4、 使用user2登录数据库,并访问user1中创建的表及视图

图片.png

如上所示,用户user2已可以访问授权以后,user1创建的表及视图。

3.2 示例2:使用当前用户授权

在示例1中,我们使用的是数据库的初始用户,来指定将user1中未来创建的表(包含视图)允许user2来访问。所以,在命令中,我们需要使用“for user user1”的选项来指定user1。若我们使用user1用户自身来授权user2时,则该选项可以省略。

测试过程如下:

1、 清理环境,避免影响

图片.png

2、 创建user1,user2,并允许user2访问user1中此后创建的表和视图。

图片.png

使用user1登录后,执行alter default privileges 命令:

图片.png

注意,上图与示例1的区别在于:其一,执行的用户是user1,其二,命令中无需指定“for user user1”选项。当不指定该选项时,默认是当前用户。

3、 在user1中创建表及视图

图片.png

4、 使用user2登录数据库,并访问user1中创建的表及视图

图片.png

如上所示,用户user2已可以访问授权以后,user1创建的表及视图。

3.3 示例3:指定SCHEMA

在前面的示例1和示例2,是将user1下的表(包括视图),无论其处于哪个SCHEMA下,都允许user2来访问。如果只允许user2访问user1指定SCHEMA(可以指定多个)下的表(包括视图),则需要使用到“[ IN SCHEMA schema_name [, …] ]”选项。
以下,将展示此场景需求下的操作及效果:

1、 清理环境,避免影响

图片.png

2、 创建user1,user2及所需的schema

为user1额外再创建两个schema(user_schema1和user_schema2),设置其owner为user1,并允授权user2对user1所拥有的三个schema(user1,user_schema1,user_schema2)的usage权限
图片.png

3、 使用alter default privileges命令,允许user2访问

user_schema1和user_schema2中未来创建的表(包括视图)
图片.png

如上图所示,我们这里使用到了“in schema user_schema1,user_schema2”的选项。

4、 使用user1创建相应的表和视图

使用user1,分别在上述的三个schema中,各创建一张表。在三个schema中,还各创建三个视图,这三个视图用于分别访问不同schema中的表。目的是测试user2可以访问哪些schema中的表和视图。
图片.png

如上图所示,在三个schema中,分别创建了三张表。

然后在三个schema中,各创建三个视图,用于分别访问上述三张表。如下图所示:
图片.png

如上图所示,虽然三个视图名称完全相同,但由于它们分别位于不同的schema中,所以,并不会产生类似“对象已存在”的冲突。

5、 使用user2访问上述的三张表

图片.png

如上所示,由于我们在使用alter default privileges给user2授权时,使用了“in schema user_schema1,user_schema2”的选项,所以,user2只能访问位于这两个schema中的表。

6、 使用user2访问前面创建的九个视图。

先来访问位于user1 schema中的三个视图:
图片.png

如上图所示,user2均无法访问。这是因为user2并无访问schema user1中的权限。
接下来,访问 user_schema1中的三个视图:
图片.png

如上图所示,我们发现,尽管我们并没有访问位于user1 schema中表user1_tab1的权限,但并不影响我们对位于user_schema1中访问该表的视图vw_user1_tab1的访问。

最后,我们访问 user_schema2中的三个视图:
图片.png

如上图所示,其结果与前述类似,这里不再赘述。

第四章 附录

ALTER DEFAULT PRIVILEGES语法摘要说明
语法格式:

  ALTER DEFAULT PRIVILEGES[ FOR { ROLE | USER } target_role [, ...] ][ IN SCHEMA schema_name [, ...] ]abbreviated_grant_or_revoke;

其中abbreviated_grant_or_revoke子句用于指定对哪些对象进行授权或回收权限。有如下一些子句:

• grant_on_tables_clause
• grant_on_sequences_clause
• grant_on_functions_clause
• grant_on_types_clause
• grant_on_client_master_keys_clause
• grant_on_column_encryption_keys_clause
• revoke_on_tables_clause
• revoke_on_sequences_clause
• revoke_on_functions_clause
• revoke_on_types_clause
• revoke_on_client_master_keys_clause
• revoke_on_column_encryption_keys_clause

其中grant_on_tables_clause子句用于对表授权。

 GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM } [, ...] | ALL [ PRIVILEGES ] }ON TABLES TO { [ GROUP ] role_name | PUBLIC } [, ...][ WITH GRANT OPTION ]

其中grant_on_sequences_clause子句用于对序列授权。

GRANT { { SELECT | UPDATE | USAGE | ALTER | DROP | COMMENT }
[, …] | ALL [ PRIVILEGES ] }
ON SEQUENCES
TO { [ GROUP ] role_name | PUBLIC } [, …]
[ WITH GRANT OPTION ]

其中grant_on_functions_clause子句用于对函数授权。

  GRANT { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }ON FUNCTIONS TO { [ GROUP ] role_name | PUBLIC } [, ...][ WITH GRANT OPTION ]

其中grant_on_types_clause子句用于对类型授权。

  GRANT { { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }ON TYPES TO { [ GROUP ] role_name | PUBLIC } [, ...][ WITH GRANT OPTION ]

其中grant_on_client_master_keys_clause子句用于对客户端主密钥授权。

  GRANT { { USAGE  | DROP } [, ...] | ALL [ PRIVILEGES ] }ON CLIENT_MASTER_KEYSTO { [ GROUP ] role_name | PUBLIC } [, ...][ WITH GRANT OPTION ]

其中grant_on_column_encryption_keys_clause子句用于对列加密密钥授权。

 GRANT { { USAGE | DROP } [, ...] | ALL [ PRIVILEGES ] }ON COLUMN_ENCRYPTION_KEYS TO { [ GROUP ] role_name | PUBLIC } [, ...][ WITH GRANT OPTION ]

其中revoke_on_tables_clause子句用于回收表对象的权限。

REVOKE [ GRANT OPTION FOR ]{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM } [, ...] | ALL [ PRIVILEGES ] }ON TABLES FROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]

其中revoke_on_sequences_clause子句用于回收序列的权限。

REVOKE [ GRANT OPTION FOR ]
{ { SELECT | UPDATE | USAGE | ALTER | DROP | COMMENT }
[, …] | ALL [ PRIVILEGES ] }
ON SEQUENCES
FROM { [ GROUP ] role_name | PUBLIC } [, …]
[ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]

其中revoke_on_functions_clause子句用于回收函数的权限。

REVOKE [ GRANT OPTION FOR ]{ {EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }ON FUNCTIONS FROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]

其中revoke_on_types_clause子句用于回收类型的权限。

  REVOKE [ GRANT OPTION FOR ]{ { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }ON TYPES FROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]

其中revoke_on_client_master_keys_clause子句用于回收客户端主密钥的权限。

  REVOKE [ GRANT OPTION FOR ]{ { USAGE | DROP } [, ...] | ALL [ PRIVILEGES ] }ON CLIENT_MASTER_KEYS FROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]

其中revoke_on_column_encryption_keys_clause子句用于回收列加密密钥的权限。

  REVOKE [ GRANT OPTION FOR ]{ { USAGE | DROP } [, ...] | ALL [ PRIVILEGES ] }ON COLUMN_ENCRYPTION_KEYSFROM { [ GROUP ] role_name | PUBLIC } [, ...][ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]

参数说明

target_role
已有角色的名称。如果省略FOR ROLE/USER,则缺省值为当前角色/用户。
取值范围:已有角色的名称。

schema_name
现有模式的名称。
target_role必须有schema_name的CREATE权限。
取值范围:现有模式的名称。

role_name
被授予或者取消权限角色的名称。
取值范围:已存在的角色名称。

如果想删除一个被赋予了默认权限的角色,有必要恢复改变的缺省权限或者使用DROP OWNED BY来为角色脱离缺省的权限记录。


文章转载自:

http://P2Ppgnq2.rptdz.cn
http://qkjKuGjL.rptdz.cn
http://czsSkqd6.rptdz.cn
http://cdPz7B7J.rptdz.cn
http://V2sWccXA.rptdz.cn
http://aov6o8xa.rptdz.cn
http://OLtNcw1A.rptdz.cn
http://8yh8qgEW.rptdz.cn
http://UQxBv1Xn.rptdz.cn
http://mLiM9UBs.rptdz.cn
http://QJAvH5CH.rptdz.cn
http://3iRQSvk9.rptdz.cn
http://MkIFcnyq.rptdz.cn
http://PhRtqR7f.rptdz.cn
http://hWtFhBJQ.rptdz.cn
http://DcJK4mI5.rptdz.cn
http://AgiwW64O.rptdz.cn
http://JY8jdOU4.rptdz.cn
http://5k0d6EvG.rptdz.cn
http://HdRrxGCw.rptdz.cn
http://1CLjOBHF.rptdz.cn
http://C5wAZdJz.rptdz.cn
http://KGBl0LSG.rptdz.cn
http://XUfjNtQY.rptdz.cn
http://QdYVbpW1.rptdz.cn
http://ui4LrDUb.rptdz.cn
http://npolF8Ss.rptdz.cn
http://l7ZK4WsN.rptdz.cn
http://TIjtkJ9w.rptdz.cn
http://mF2MsMlR.rptdz.cn
http://www.dtcms.com/a/376762.html

相关文章:

  • 自建注册中心
  • PMP考试结构、学习框架与基本术语
  • BrotliCompressor压缩器封装,以及 PDF编码器介绍
  • React 核心 Hook 与冷门技巧:useReducer、useEffect、useRef 及 is 属性全解析
  • 【大前端】 断点续传 + 分片上传(大文件上传优化) 的前端示例
  • 学习React-11-useDeferredValue
  • Django项目部署实战:Nginx + Gunicorn 云服务器完整指南
  • 【实战+原理】微软云 Azure Database 私有网络接入模式全解析:从子网委派到Private Endpoint
  • 排序---插入排序(Insertion Sort)
  • k8s的service
  • 量化冗余分析中变量的关系丨TomatoSCI分析日记
  • Python设计模式
  • AD8028ARZ-REEL7电子元器件ADI 运算放大器IC 精密模拟芯片
  • uniapp和vue3项目中引入echarts 、lime-echart(微信小程序、H5等)
  • SpringMVC 执行流程分析 详解(图解SpringMVC执行流程)
  • Pytest 常见问题及其解决方案
  • 9-10关于JS初学产生的问题
  • Gradle使用技巧(Android场景)
  • 【Kubernetes】常见面试题汇总(十三)
  • MySql 内外连接
  • 从Java全栈到前端框架的实战之路
  • AI电子宠物本地部署模型方案全面解析
  • 行业学习【电商】:垂直电商如何理解?以专业宠物平台为例
  • Android 项目:画图白板APP开发(五)——橡皮擦(全面)
  • 2018年下半年 系统架构设计师 综合知识
  • SPEA2多目标进化算法:理论与应用全解析
  • 医院高值耗材智能化管理路径分析(上)
  • Java 声明式编程- Stream API 实战
  • 9月10日
  • LeakCanary原理示例讲解