关于达梦数据库VPD的学习总结

一、VPD概念

虚拟专用数据库 (VPD) 提供了角色和视图无法提供的行级访问控制。在企业中,为了确保客户只能访问到自己的数据,而不能访问其他客户的数据,比如银行行业,客户只能看到自己的账户里的数据,但是不能访问到其他客户的数据,提高数据的安全性,也能降低成本,因此使用VPD技术

二、工作原理

将一个或多个安全策略与表或视图关联后,就可以实现虚拟专用数据库。

三、简单示例

达梦数据库管理系统提供了 DBMS_RLS 包, DBMS_RLS 包通过策略(POLICY)管理方法来实现数据行的隔离。

以下创建一个员工表,员工自己只能看到自己的信息,只有管理员才能看到所有员工信息

第一步:执行过程

SP_CREATE_SYSTEM_PACKAGES(1);

第二步:创建测试用户user1,user2

create user user1 identified by 123457890;
create user user2 identified by 1234567890;
grant dba to user1;
grant dba to user2;

第三步:创建员工表:

drop table if exists sysdba.employee;
create table sysdba.employee (eid int,ename varchar(10),salary double,mouth int);
insert into sysdba.employee values(1,'user1',5000,1);
insert into sysdba.employee values(2,'user2',5000,1);
insert into sysdba.employee values(3,'user1',5000,2);
insert into sysdba.employee values(4,'user2',5000,2);
insert into sysdba.employee values(5,'user1',5100,3);
commit;

此时,user1依旧可以看到五条数据

第四步:创建策略函数

CREATE OR REPLACE FUNCTION FN_employee(p_schema VARCHAR2,p_object VARCHAR2) 
RETURN VARCHAR2 IS
    v_user VARCHAR2(100) := CURRENT_USER();
    v_where_condition VARCHAR2(2000);
BEGIN
    IF v_user = 'SYSDBA' THEN
        v_where_condition := NULL;
    ELSE 
        v_where_condition := 'ename = ''' || v_user || '''';
    END IF;
    RETURN v_where_condition;
END;

CURRENT_USER():当前用户

第五步:创建策略组

DBMS_RLS.CREATE_POLICY_GROUP(
    OBJECT_SCHEMA=>'SYSDBA',    --模式名
    OBJECT_NAME=>'EMPLOYEE',    --表名
    POLICY_GROUP=>'PG_EMPLOYEE'    --策略组名
);

第六步:将创建好的策略应用到我们设定的员工表

DBMS_RLS.ADD_GROUPED_POLICY(
    OBJECT_SCHEMA=>'SYSDBA',    --表模式名
    OBJECT_NAME=>'EMPLOYEE',    --表名
    POLICY_GROUP=>'PG_EMPLOYEE',    --策略组名
    POLICY_NAME=>'EMPLOYEE_POLICY',    --策略名
    FUNCTION_SCHEMA=>'SYSDBA',    --策略函数的模式名
    POLICY_FUNCTION=>'FN_employee',    --策略函数名
    STATEMENT_TYPES=>'select,update,delete,insert',    --应用策略的DML语句类型
    UPDATE_CHECK=>true,    
    ENABLE=>true    --是否启用策略
);

以上步骤已经完成策略创建和使用了

接下来测试是否成功,user1登录

select * from sysdba.employee;

 

以上就是简单总结DM的VPD的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值