当前位置: 首页 > 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.dtcms.com/a/339107.html

相关文章:

  • 鱼骨图图片制作全指南:使用工具推荐 + 行业案例
  • Python实战:SEO优化自动化工具开发指南
  • 大数据毕业设计选题推荐:护肤品店铺运营数据可视化分析系统详解
  • Android面试指南(三)
  • 在Excel和WPS表格中为多个数字同时加上相同的数值
  • 从接口自动化测试框架设计到开发(三)主流程封装、返回数据写入excel
  • 【iOS】内存管理
  • 如何在 Ubuntu Linux 上安装 RPM 软件包
  • 在 Windows 上使用 Kind 创建本地 Kubernetes 集群并集成Traefik 进行负载均衡
  • 2025年8月16日(星期六):雨骑古莲村游记
  • [优选算法专题二——找到字符串中所有字母异位词]
  • 网络间的通用语言TCP/IP-网络中的通用规则4
  • Java网络编程:TCP与UDP通信实现及网络编程基础
  • C语言—指针(针对小白版)
  • 算法学习day19----博弈论模型--取石子游戏(Python)
  • 懒加载机制实现子模块按需动态导入
  • 全平台轻量浏览器推荐|支持Win/macOS/Linux,极速加载+隐私保护+扩展插件,告别广告与数据追踪!
  • RT-Thread Nano移植到STM32心得(基于GCC、HAL库)
  • Mac下载AOSP源代码
  • UE小:交叉编译linux的坑
  • 【集合框架HashSet底层原理】
  • IDEA:设置彩色输出
  • DataAnalytics之Tool:Metabase的简介、安装和使用方法、案例应用之详细攻略
  • 项目一系列-第5章 前后端快速开发
  • 虚拟环境安装了fastapi但是使用时报错:ModuleNotFoundError: No module named ‘fastapi‘
  • C++利用CerateProcess创建WPF进程并通过命名管道通讯
  • Scikit-learn通关秘籍:从鸢尾花分类到房价预测
  • 项目部署与持续集成
  • Android RxJava数据库操作:响应式改造实践
  • AUTOSAR进阶图解==>AUTOSAR_SWS_FunctionInhibitionManager