KingbaseES 如何把一个schema下的所有对象访问权限授权给其他用户

用户需求:新建一个用户 B,需要能够查询A用户的所有表,并且对以后新建的表也要有select权限。
问题分析:对于现有的表可以通过动态sql批量进行授权,但是未来新建的表要如何进行授权呢?
查询了帮助文档发现通过alter default privileges命令可以实现。

  • 命令描述

ALTER DEFAULT PRIVILEGES允许你设置将被应用于未来要创建的对象的特权(它不会影响分配给已经存在的对象的特权)。

*语法

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

更具体语法请看官方帮助文档:
https://help.kingbase.com.cn/stage-api/profile/document/kes/v8r6/html/development/server-programming/sql/ref-sql/sql-alterdefaultprivileges.html

  • 测试

test=# \c test user1
您现在已经连接到数据库 "test",用户 "user1".
test=> create table t_user1 (id int);
CREATE TABLE
test=> insert into t_user1 values (2);
INSERT 0 1
test=> \c test system
您现在已经连接到数据库 "test",用户 "system".
test=# create role user2 with login;
CREATE ROLE
test=# alter role user2 with password '123456';
ALTER ROLE
test=# create schema user2 authorization user2;
CREATE SCHEMA
test=> GRANT USAGE ON SCHEMA user1 to user2;
GRANT
test=> ALTER DEFAULT PRIVILEGES IN SCHEMA user1 GRANT SELECT ON TABLES TO user2;
ALTER DEFAULT PRIVILEGES
test=> \c test user1
您现在已经连接到数据库 "test",用户 "user1".
test=> create table t2_user1 (id int);
CREATE TABLE
test=> insert into t2_user1 values (3);
INSERT 0 1
test=> \c test user2
您现在已经连接到数据库 "test",用户 "user2".
test=> select * from user1.t2_user1; --可以查询授权后新建的表
id


3
(1 行记录)
test=> select * from user1.t_user1; --对旧的对象权限没有影响
错误: 对表 t_user1 权限不够

posted @ 2022-03-18 13:28  KINGBASE研究院  阅读(808)  评论(0编辑  收藏  举报