1. 程式人生 > 其它 >KingbaseES的預設訪問許可權

KingbaseES的預設訪問許可權

使用者需求:新建一個使用者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 許可權不夠