VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

带有安全属性的用户数据输出

功能描述

确保用户数据(表)输出到数据库之外时,数据库安全功能应执行DAC和MAC(如启用),且输出关联的行级敏感标记即隐藏的系统列ogmac_label(如果存在)。

语法格式

COPY { table_name [ ( column_name [, ...] ) ]  }
TO { 'filename' | PROGRAM 'command' | STDOUT }
[ [ WITH ] ( option [, ...] ) ]

参数说明

option

敏感标签MAC_LABEL。

注意事项

  • MAC_LABEL选项仅支持copy table (column, …) to … 形式。

  • copy (select * from ) to … 不支持with (MAC_LABEL) 选项。

  • copy to … 不支持 FIXED FORMATTER … with (MAC_LABEL)。

示例

前置条件

当参数enable_copy_server_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable_copy_server_files打开,允许具有SYSADMIN权限的用户或继承了内置角色gs_role_copy_files权限的用户执行,但默认禁止对数据库配置文件,密钥文件,证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。

1、查看当前参数取值。

show enable_copy_server_files;
show ogmac_enable_mac;

2、开启参数。

alter system set enable_copy_server_files=on;
alter system set ogmac_enable_mac=on;

操作步骤

1、创建用户。

create user user_select password 'Bigdata@123';
create user user_insert password 'Bigdata@123';
create table t1(a int,b varchar2(20));

2、创建敏感标记。

create security label label1 'L6:G1';
create security label u_insert 'L3:G1';
create security label u_select 'L5:G1';
SECURITY LABEL ON TABLE t1 IS 'label1';
SECURITY LABEL ON ROLE user_select IS 'u_select';
SECURITY LABEL ON ROLE user_insert IS 'u_insert';
grant all on table t1 to user_select;
grant all on table t1 to user_insert;

3、切换到user_insert插入数据。

SET SESSION AUTHORIZATION user_insert PASSWORD 'Bigdata@123';
insert into t1 values(1,'a');
insert into t1 values(2,'b');

4、切换到user_select导出数据。

SET SESSION AUTHORIZATION user_select PASSWORD 'Bigdata@123';
copy t1 to '/tmp/t1.txt' with (mac_label);