#三权分立
# 三权分立开关
YashanDB提供ENABLE_SEPARATE_DUTY参数用于控制三权分立开关,默认关闭,该参数需重启生效。
建议在建库前规划确认好是否使用三权分立模式,如使用在建库时即打开开关,不建议反复切换权限模式。如建库时未打开,但后续确有需要开启时,应该先对当前已有用户的权限集合先进行清理归整。
# 三权分立影响范围
三权分立是对数据库管理人员的职责划分,目的是使不同的管理职位各司其职,行使不同角色,互相限制和监督,保障系统整体安全。因此,开启三权分立影响的是各管理用户的系统权限,对于普通用户,以及用户下的对象权限,将不受到影响。
例如,在默认情况下三权分立未开启,创建管理用户user1并授予其DBA角色,创建普通用户user2。在user2下创建表table1、table2,且对user1授予了查询table1的对象权限。
--作为DBA,user1可以访问user2下的任意表
CREATE USER user1 IDENTIFIED BY "user1";
CREATE USER user2 IDENTIFIED BY "user2";
GRANT dba TO user1;
GRANT CONNECT TO user2;
GRANT RESOURCE TO user2;
conn user2/user2
CREATE TABLE table1(C1 INT);
INSERT INTO table1 VALUES(1);
CREATE TABLE table2(C2 INT);
INSERT INTO table2 VALUES(2);
GRANT SELECT ON table1 TO user1;
conn user1/user1
SELECT * FROM user2.table1;
C1
------------
1
SELECT * FROM user2.table2;
C2
------------
2
当开启三权分立后,user1的系统权限将发生变化,对于未被授权的对象table2不再能够访问,也无法执行系统权限的授权操作。
ALTER SYSTEM SET ENABLE_SEPARATE_DUTY=true SCOPE=SPFILE;--重启数据库生效
conn user1/user1
SELECT * FROM user2.table1;
C1
------------
1
SELECT * FROM user2.table2;
[1:15]YAS-02012 table or view does not exist
GRANT CREATE TABLE TO user2;
YAS-02213 insufficient privileges
对于user2用户,其本身已拥有权限无任何变化,并可以将table2的查询权限授予user1用户。
conn user2/user2
GRANT SELECT ON table2 TO user1;
conn user1/user1
SELECT * FROM user2.table2;
C2
------------
2