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

GaussDB 中 alter default privileges 的使用示例

第一章 Alter default privileges的作用

1.1 功能描述

在GaussDB的官方手册中,对于alter default privileges的功能描述如下:ALTER DEFAULT PRIVILEGES语句用于修改数据库中用户在特定对象上默认拥有的权限,不会影响分配到已有对象中的权限。

我们知道,数据库中还有一个GRANT的命令,也是给用户赋权的,而且,也是可以是在特定对象上进行赋权。这两个命令有什么区别呢?

1.2 与GRANT命令作用的差异

我们通过以下示例,展示alter default privileges执行后的效果与grant执行后的效果差异。

假设我们有两个用户:user1和user2, 我们希望user2可以访问到user1创建的所有表。

构建测试环境:

1、 创建用户user1和user2
在这里插入图片描述
在这里插入图片描述

2、 使用user1创建表user1_tab1
在这里插入图片描述

3、 使用user2登录目标库,并查询的结果。
在这里插入图片描述
如上图所示,可见,此时无权限访问user1的表。

4、 使用grant命令,授权user2可以访问user1的表
图片.png

5、 再次使用user2登录目标库并查询
在这里插入图片描述
结果,发现我们还是被提示无权限。
这是因为我们还需要有在SCHEMA上的USAGE权限,才能有完全的权限来访问目标表。

6、 为user2授权在schema user1上有USAGE的权限
在这里插入图片描述

7、 再次使用user2登录目标库并查询
在这里插入图片描述
如上图所示,至此,user2已经可以正常访问user1的user1_tab1表了。

8、 继续在user1中创建第二张表,并验证user2是否可以访问第二张表。
在这里插入图片描述在这里插入图片描述
如上两图所示,user2无权限访问新创建的第二张表。可见,在第4步,使用grant进行的授权命令,只对已经存在的表生效。而在授权后,新建的表,是不会自动授权的。

9、 使用alter default privileges命令授权user2可以访问user1的表
在这里插入图片描述

10、 使用user1用户,创建第三张表,并验证user2是否可以访问第三张表。
在这里插入图片描述在这里插入图片描述
如上图所示,执行alter default privileges后,user1中再新建的表,user2是可以访问的。但在执行alter default privileges之前创建的user_tab2表,user2依然是无法访问的。此时,要通过grant命令,进行再次授权才可以。如下图所示:
在这里插入图片描述
通过以上实验,我们可知,grant命令只对已存在的对象生效,而alter default privileges则只对未来创建的对象生效。所以,当我们希望某个用户不仅可以访问另外一个用户或SCHEMA下的对象,还可以访问未来在另一个用户或SCHEMA下新创建的对象,则还要注意执行alter default privileges命令进行授权。

下一章,我们对alter default privileges命令的语法和使用,做进一步说明。

第二章 Alter default privileges的命令用法

2.1 命令语法

 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

从上述的文本中,可知目前只支持对表(包括视图)、序列、函数,类型,密态数据库客户端主密钥和列加密密钥的权限进行更改。

而每一个abbreviated_grant_or_revoke又有不同的语法(详情请见附录部分),在下一节中,我们以grant_on_tables_clause和revoke_on_tables_clause为例,通过示例的方式进行说明。其它子句同理。

如下所示,在ALTER DEFAULT PRIVILEGES关键字与abbreviated_grant_or_revoke之间,还有两个选项:[ FOR { ROLE | USER } target_role [, …] ] 和[ IN SCHEMA schema_name [, …] ]

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

2.1.1 [ FOR { ROLE | USER } target_role [, …] ]
该选项用于指定要把哪一个,或几个角色或用户中的对象授权给目标用户。如果省略了该选项,则表示将当前会话连接所使用的用户中的对象授权给目标用户。

2.1.2 [ IN SCHEMA schema_name [, …] ]
该选项用于进一步限定,指定角色或用户的对象中,位于哪个,或哪几个SCHEMA中的对象生效。
注:在PG体系的数据库(包括Gaussdb)中,允许一个用户有多个SCHEMA。不同SCHEMA中的对象可以重名。SCHEMA位于DATABASE之下,即SCHEMA只能属于特定的DATABASE,而不能跨数据库。

2.1.3 grant_on_tables_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命令。相较于完整版的GRANT命令,有以下几处不同:

少了TRIGGER权限
GRANT命令中,ON { [ TABLE ] table_name [, …] | ALL TABLES IN SCHEMA schema_name [, …] } 的选项,对于其中的[ TABLE ] table_name [, …]选项,由于alter default privileges是针对未来的对象进行设置,所以,当下是不可知的,因此,该选项对本命令无意义;而ON ALL TABLES选项则改为了ON TABLES, IN SCHEMA schema_name [, …]选项,则转到alter default privileges命令中的[ IN SCHEMA schema_name [, …] ]选项中实现。

2.1.4 revoke_on_tables_clause
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命令。相较于完整版的REVOKE命令,其差异主要是在REVOKE命令中,ON { [ TABLE ] table_name [, …] | ALL TABLES IN SCHEMA schema_name [, …] } 的选项上,其中[ TABLE ] table_name [, …]选项,由于alter default privileges是针对未来的对象进行设置,所以,当下是不可知的,因此,该选项对本命令无意义;而ON ALL TABLES选项,则变为了ON TABLES, IN SCHEMA schema_name [, …]则转到alter default privileges中的[ IN SCHEMA schema_name [, …] ]选项中实现。

对alter default privileges的使用,在下篇文章中,将继续通过使用示例来做进一步的说明。

http://www.xdnf.cn/news/1326061.html

相关文章:

  • 从数据表到退磁:Ansys Maxwell中N48磁体磁化指南
  • GaussDB 八种常规锁介绍
  • MoonBit Perals Vol.06: Moonbit 与 LLVM 共舞 (上):编译前端实现
  • CloudDM 新增支持 GaussDB 与 openGauss:国产数据库管理更高效
  • wx小游戏canvas能力封装
  • 推理还是训练 || KV缓存和CoT技术
  • 云原生堡垒机渗透测试场景
  • 应急响应常见命令
  • 代码随想录刷题——字符串篇(七)
  • ChatBI驱动的智能商业决策:奥威BI的深度实践
  • Java多线程:线程创建、安全、同步与线程池
  • 常见的 Bash 命令及简单脚本
  • C语言实战:从零开始编写一个通用配置文件解析器
  • SpringAI——向量存储(vector store)
  • 电子电气架构 --- 软件项目成本估算
  • UE5 PCG 笔记(一)
  • 零基础数据结构与算法——第八章 算法面试准备-数组/字符串/链表/树/动态规划/回溯
  • JVM之Java内存区域与内存溢出异常
  • Python + 淘宝 API 开发:自动化采集商品数据的完整流程​
  • 8.19作业
  • 星图云开发者平台新功能速递 | 微服务管理器:无缝整合异构服务,释放云原生开发潜能
  • 部署tomcat应用时注意事项
  • 数据迁移:如何从MySQL数据库高效迁移到Neo4j图形数据库
  • 高性能AI推理与工作站GPU:DigitalOcean L40s、RTX 6000 Ada与A6000全解析
  • UniApp 微信小程序之间跳转指南
  • Leetcode 343. 整数拆分 动态规划
  • 【最新版】CRMEB Pro版v3.4系统源码全开源+PC端+uniapp前端+搭建教程
  • LLM 中 token 简介与 bert 实操解读
  • 大语言模型中的归一化实现解析
  • Vim笔记:缩进