Skip to content

综合示例

本章节创建一个用户usr_1,并创建两张表插入数据,对主体(用户)和客体(表)添加不同的安全等级,用户通过对表进行查询、修改等操作进行示例。

  1. SYSDBA用户登录,创建用户并创建表插入值。

    sql
    -- 创建用户与授权
    SQL> CREATE USER usr_1 IDENTIFIED BY 'QWEasd12#@';
    SQL> GRANT DBA TO usr_1;
    
    -- 创建表并插入值
    SQL> CREATE TABLE usr_1.tab_test_1(c1 INT, c2 VARCHAR);
    SQL> CREATE TABLE usr_1.tab_test_2(c1 INT, c2 VARCHAR);
    SQL> INSERT INTO usr_1.tab_test_1 VALUES(1, 'a');
    SQL> INSERT INTO usr_1.tab_test_1 VALUES(2, 'b');
    SQL> INSERT INTO usr_1.tab_test_2 VALUES(1, 'alpha');
    SQL> INSERT INTO usr_1.tab_test_2 VALUES(2, 'beta');
  2. SYSSSO用户登录,创建安全策略,包括3个等级,并为用户和表添加不同的等级。

    sql
    -- 创建安全策略
    SQL> CREATE POLICY policy_1 ADD LEVEL level_1 AS 1,ADD LEVEL level_2 AS 3,ADD LEVEL level_3 AS 5;
    
    -- 用户等级为3
    SQL> ALTER USER POLICY usr_1 ADD policy_1 LEVEL level_2;
    
    -- 表等级分别为1、5
    SQL> ALTER TABLE POLICY usr_1.tab_test_1 ADD policy_1 COLUMN c3 NOT HIDE LABEL 'level_1:';
    SQL> ALTER TABLE POLICY usr_1.tab_test_2 ADD policy_1 COLUMN c3 NOT HIDE LABEL 'level_3:';
  3. usr_1用户登录,等级为3,大于tab_test_1的等级1,小于tab_test_2的等级5,因此修改表tab_test_1出现错误,并无法读取表tab_test_2数据。

    sql
    -- 修改表数据
    SQL> UPDATE tab_test_1 SET c2 = 'c' WHERE c1 = 2;
    [E18028] 更改操作违反强制安全控制策略
    
    -- 读取表数据
    SQL> SELECT * FROM tab_test_1;
    C1 | C2 | C3 | 
    ------------------------------------------------------------------------------
    1 | a| 281474976710656 |
    2 | b| 281474976710656 |
    
    SQL> SELECT * FROM tab_test_2;
    
    C1 | C2 | C3 | 
    ------------------------------------------------------------------------------