#三权分立

# 三权分立开关

YashanDB提供ENABLE_SEPARATE_DUTY参数控制三权分立开关,默认关闭,该参数需重启生效。

建议在建库前先规划确认是否使用三权分立模式,如需使用,则可在建库操作时一并开启,不建议反复切换权限模式。若建库时未开启,但后续确有需要开启,应该先对当前已有用户的权限集合进行清理归整再开启三权分立。

# 三权分立影响范围

三权分立是对数据库管理人员的职责划分,目的是使不同的管理职位行使不同角色各司其职,互相限制和监督,保障系统整体安全。因此,开启三权分立影响的是各管理用户的系统特权,普通用户以及用户下的对象特权不会受到影响。

例如,在默认情况下三权分立未开启,创建管理用户sales1并授予其DBA角色,创建普通用户sales2。在sales2下创建表area1、area2,且对sales1授予了查询area1的对象特权。

-- 作为DBA,sales1可以访问sales2下的任意表
CREATE USER sales1 IDENTIFIED BY "sales1";
CREATE USER sales2 IDENTIFIED BY "sales2";
GRANT dba TO sales1;
GRANT CONNECT TO sales2;
GRANT RESOURCE TO sales2;

conn sales2/sales2
CREATE TABLE area1(C1 INT);
INSERT INTO area1 VALUES(1);
CREATE TABLE area2(C2 INT);
INSERT INTO area2 VALUES(2);
GRANT SELECT ON area1 TO sales1;

conn sales1/sales1
SELECT C1 FROM sales2.area1;
          C1 
------------ 
           1
SELECT C2 FROM sales2.area2;
          C2 
------------ 
           2

当开启三权分立后,sales1的系统特权将发生变化,对于未被授权的对象area2不再能够访问,也无法执行系统特权的授权操作。

ALTER SYSTEM SET ENABLE_SEPARATE_DUTY=true SCOPE=SPFILE;

-- 重启数据库生效

conn sales1/sales1
SELECT C1 FROM sales2.area1;
          C1 
------------ 
           1
SELECT C2 FROM sales2.area2;
[1:15]YAS-02012 table or view does not exist

GRANT CREATE TABLE TO sales2;
YAS-02213 insufficient privileges

对于sales2用户,其本身已拥有权限无任何变化,并可以将area2的查询权限授予sales1用户。

conn sales2/sales2
GRANT SELECT ON area2 TO sales1;

conn sales1/sales1
SELECT C2 FROM sales2.area2;
          C2 
------------ 
           2
pdf-btn 下载文档
copy-btn 复制链接