文档下载建议反馈入口

  • 创建标记
  • 查看标记
  • 删除标记
  • 应用标记
  • 撤销标记

标记管理

标记,也称为标签,用于对数据库主体或者客体进行标识。标记包括密级和范围两个参数,其中密级是必选参数,范围为可选参数。一个标记只能设置一个密级,但是可以设置 0 个或多个范围。密级和范围之间使用冒号(:)隔开。多个范围之间之间使用逗号(,)隔开。

说明

目前,标记管理只适用于 KaiwuDB 关系库和关系表。

创建标记

CREATE LABEL 语句用于创建标记。

前提条件

  • 非三权分立模式下,用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
  • 三权分立模式下,用户是 secadmin 角色的成员。默认情况下,secroot 用户属于 secadmin 角色。

语法格式

CREATE LABEL <label_name> WITH LEVEL <level_name> [WITH COMPARTMENT <compartment_name_list>];

参数说明

参数说明
label_name待创建的标记的名称。
level_name待创建标记定义的密级的名称。一个标记只能设置一个密级。
compartment_name_list可选参数。待创建标记定义的范围的名称。支持设置 0 个或多个范围。多个范围之间之间使用逗号(,)隔开。

语法示例

以下示例创建一个标记,并指定密级和范围。

CREATE LABEL label1 WITH LEVEL CONFIDENTIAL WITH COMPARTMENT comp1;

查看标记

SHOW LABELS 语句用于查看所有标记。

前提条件

语法格式

SHOW LABELS [FOR [DATABASE <database_name> | TABLE <table_name> | USER <user_name> ]];

参数说明

参数说明
databse_name待查看数据库的名称,用于查看指定数据库的标记。
table_name待查看表的名称,用于查看指定数据库表的标记。
user_name待查看用户的名称,用于查看指定用户的标记。

语法示例

  • 查看指定数据库的标记。

    SHOW LABELS FOR DATABASE db1;
    label  |        value
    ---------+-----------------------
    label3 | l3:comp1,comp2,comp3
    
  • 查看指定表的标记。

    SHOW LABELS FOR TABLE db1.tb1;
    label  |        value
    ---------+-----------------------
    label3 | l3:comp1,comp2,comp3
    
  • 查看指定用户的标记。

    SHOW LABELS FOR USER user1;
    label  |     value
    ---------+-----------------
    label2 | l2:comp1,comp2
    

删除标记

DROP LABEL 语句用于删除标记。每条语句支持删除一个标记。

说明

如果目标标记已应用于主体或者客体,KaiwuDB 不支持删除该标记。

前提条件

  • 非三权分立模式下,用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
  • 三权分立模式下,用户是 secadmin 角色的成员。默认情况下,secroot 用户属于 secadmin 角色。

语法格式

DROP LABEL [IF EXISTS] <label_name>;

参数说明

参数说明
IF EXISTS可选关键字。 当使用 IF EXISTS 关键字时,如果目标标记存在,系统删除目标标记。如果目标标记不存在,系统删除目标标记失败,但不会报错。当未使用 IF EXISTS 关键字时,如果目标标记存在,系统删除目标标记。如果目标标记不存在,系统报错,提示目标标记不存在。
label_name待删除标记的名称。

语法示例

以下示例删除一个名为 label1 的标记。

DROP LABEL lalel1;

应用标记

GRANT LABEL 语句用于将标记应用于主体和客体。其中,GRANT LABEL label_name TO USER 语句用于将标记应用于主体,其他语句用于将标记应用于数据库、表和视图等客体。

说明

  • 标记不能应用于 admin 管理员、系统管理员、安全管理员和审计管理员等用户主体,只能应用于新创建的普通用户。
  • 标记不能应用于 system 数据库及其成员对象等客体。
  • 将多个标记应用于主体时,多个标记必须具备相同的密级,且范围值采取并集。
  • 将标记应用于客体时,表的密级不高于库的密级,并且表的范围是库的范围的子集。

前提条件

  • 非三权分立模式下,用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
  • 三权分立模式下,用户是 secadmin 角色的成员。默认情况下,secroot 用户属于 secadmin 角色。

语法格式

GRANT LABEL TO [USER <user_name> | DATABASE <database_name> | TABLE <table_name> [(<column_name_list>)]| VIEW <view_name>];

参数说明

参数说明
label_name待应用的标记的名称。
user_name待应用标记的用户的名称,用于将标记应用于指定用户。
database_name待应用标记的数据库的名称,用于将标记应用于指定数据库。
table_name待应用标记的表的名称,用于将标记应用于指定表。
column_name_list待应用标记的列的名称,用于将标记应用于指定列。支持指定一个或多个列名,列名之间使用逗号(,)隔开。
view_name待应用标记的视图的名称,用于将标记应用于指定视图。

语法示例

以下示例假设已经创建对应的用户、数据库、表、视图和以下密级、范围和标记。

-- 创建密级。
CREATE LEVEL CONFIDENTIAL=20;
CREATE LEVEL SENSITIVE=30;
CREATE LEVEL HIGHLY_SENSITIVE=40;

-- 创建范围。
CREATE COMPARTMENT comp1;
CREATE COMPARTMENT comp2;
CREATE COMPARTMENT comp3;

-- 创建标记。
CREATE LABEL label1 WITH LEVEL CONFIDENTIAL WITH COMPARTMENT comp1;
CREATE LABEL label2 WITH LEVEL SENSITIVE WITH COMPARTMENT comp1, comp2;
CREATE LABEL label3 WITH LEVEL HIGHLY_SENSITIVE WITH COMPARTMENT comp1,comp2,comp3;
  • 将标记应用于指定主体。

    GRANT LABEL label2 TO USER user1;
    
  • 将标记应用于指定数据库。

    GRANT LABEL label3 TO DATABASE db1;
    
  • 将标记应用于指定表。

    GRANT LABEL label3 TO TABLE tb1;
    
  • 将标记应用于指定列。

    GRANT LABEL label3 TO TABLE tb1(c1, c2);
    
  • 将标记应用于指定视图。

    GRANT LABEL label1 TO VIEW view1;
    

撤销标记

REVOKE LABEL 语句用于撤销主体和客体的标记。其中,REVOKE LABEL label_name FROM USER 语句用于撤销主体的标记,其他语句用于撤销数据库、表和视图等客体的标记。

前提条件

  • 非三权分立模式下,用户是 admin 角色的成员。默认情况下,root 用户属于 admin 角色。
  • 三权分立模式下,用户是 secadmin 角色的成员。默认情况下,secroot 用户属于 secadmin 角色。

语法格式

REVOKE LABEL FROM [USER <user_name> | DATABASE <database_name> | TABLE <table_name> [(<column_name_list>)]| VIEW <view_name>];

参数说明

参数说明
label_name待撤销的标记的名称。
user_name待撤销标记的用户的名称,用于撤销指定用户的标记。
database_name待撤销标记的数据库的名称,用于撤销指定数据库的标记。
table_name待撤销标记的表的名称,用于撤销指定表的标记。
column_name待撤销标记的列的名称,用于撤销指定列的标记。支持指定一个或多个列名,列名之间使用逗号(,)隔开。
view_name待撤销标记的视图的名称,用于撤销指定的标记。

语法示例

  • 撤销指定主体的标记。

    REVOKE LABEL label2 FROM USER user1;
    
  • 撤销指定数据库的标记。

    REVOKE LABEL label3 FROM DATABASE db1;
    
  • 撤销指定表的标记。

    REVOKE LABEL label3 FROM TABLE tb1;
    
  • 撤销指定列的标记。

    REVOKE LABEL label3 FROM TABLE tb1(c1, c2);
    
  • 撤销指定视图的标记。

    REVOKE LABEL label1 FROM VIEW view1;