GaussDB 中 alter default privileges 的使用示例(下)
本文通过三个示例详细介绍了GaussDB中"alter default privileges"命令的使用方法。示例1展示了初始用户授权访问未来创建表/视图的操作流程;示例2演示了当前用户授权的简化操作;示例3则重点说明了如何指定SCHEMA进行精确授权。文章还附有完整的语法说明,包括对表、序列、函数等不同类型对象的授权子句。这些示例清晰地展现了该命令在实际授权管理中的灵活应用,
在 《GaussDB中 alter default privileges 的使用示例(上)》 中,对alter default privileges的作用及语法做了介绍,本文,将继续通过使用示例来做进一步的说明。
第三章 使用示例
3.1 示例1:使用初始用户授权,不指定SCHEMA
使用数据库初始用户(默认是gaussdb)操作,允许user2用户,访问user1用户中已经存在的表(包含视图),以及未来创建的表(包含视图)。
1、 清理环境,避免影响
2、 创建user1,user2,并允许user2访问user1中此后创建的表和视图。
3、 在user1中创建表及视图
4、 使用user2登录数据库,并访问user1中创建的表及视图
如上所示,用户user2已可以访问授权以后,user1创建的表及视图。
3.2 示例2:使用当前用户授权
在示例1中,我们使用的是数据库的初始用户,来指定将user1中未来创建的表(包含视图)允许user2来访问。所以,在命令中,我们需要使用“for user user1”的选项来指定user1。若我们使用user1用户自身来授权user2时,则该选项可以省略。
测试过程如下:
1、 清理环境,避免影响
2、 创建user1,user2,并允许user2访问user1中此后创建的表和视图。
使用user1登录后,执行alter default privileges 命令:
注意,上图与示例1的区别在于:其一,执行的用户是user1,其二,命令中无需指定“for user user1”选项。当不指定该选项时,默认是当前用户。
3、 在user1中创建表及视图
4、 使用user2登录数据库,并访问user1中创建的表及视图
如上所示,用户user2已可以访问授权以后,user1创建的表及视图。
3.3 示例3:指定SCHEMA
在前面的示例1和示例2,是将user1下的表(包括视图),无论其处于哪个SCHEMA下,都允许user2来访问。如果只允许user2访问user1指定SCHEMA(可以指定多个)下的表(包括视图),则需要使用到“[ IN SCHEMA schema_name [, …] ]”选项。
以下,将展示此场景需求下的操作及效果:
1、 清理环境,避免影响
2、 创建user1,user2及所需的schema
为user1额外再创建两个schema(user_schema1和user_schema2),设置其owner为user1,并允授权user2对user1所拥有的三个schema(user1,user_schema1,user_schema2)的usage权限
3、 使用alter default privileges命令,允许user2访问
user_schema1和user_schema2中未来创建的表(包括视图)
如上图所示,我们这里使用到了“in schema user_schema1,user_schema2”的选项。
4、 使用user1创建相应的表和视图
使用user1,分别在上述的三个schema中,各创建一张表。在三个schema中,还各创建三个视图,这三个视图用于分别访问不同schema中的表。目的是测试user2可以访问哪些schema中的表和视图。
如上图所示,在三个schema中,分别创建了三张表。
然后在三个schema中,各创建三个视图,用于分别访问上述三张表。如下图所示:
如上图所示,虽然三个视图名称完全相同,但由于它们分别位于不同的schema中,所以,并不会产生类似“对象已存在”的冲突。
5、 使用user2访问上述的三张表
如上所示,由于我们在使用alter default privileges给user2授权时,使用了“in schema user_schema1,user_schema2”的选项,所以,user2只能访问位于这两个schema中的表。
6、 使用user2访问前面创建的九个视图。
先来访问位于user1 schema中的三个视图:
如上图所示,user2均无法访问。这是因为user2并无访问schema user1中的权限。
接下来,访问 user_schema1中的三个视图:
如上图所示,我们发现,尽管我们并没有访问位于user1 schema中表user1_tab1的权限,但并不影响我们对位于user_schema1中访问该表的视图vw_user1_tab1的访问。
最后,我们访问 user_schema2中的三个视图:
如上图所示,其结果与前述类似,这里不再赘述。
第四章 附录
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_KEYS
TO { [ 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_KEYS
FROM { [ 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来为角色脱离缺省的权限记录。
更多推荐
所有评论(0)