标记管理
标记,也称为标签,用于对数据库主体或者客体进行标识。标记包括密级和范围两个参数,其中密级是必选参数,范围为可选参数。一个标记只能设置一个密级,但是可以设置 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;