转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
ORACLE 的Virtual Private Database的全新体验         ★★★★

ORACLE 的Virtual Private Database的全新体验

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1639 更新时间:2009/4/22 22:08:18
SQL> execute secusr.Customer_security_context.set_customerid;

PL/SQL 过程已成功完成。

SQL> select SYS_CONTEXT(''''CUSTOMER_CONTEXT'''',''''CUSTOMERID'''') FROM DUAL;

SYS_CONTEXT(''''CUSTOMER_CONTEXT'''',''''CUSTOMERID'''')

--------------------------------------------------------------------------------

ALFKI

但是,我觉的还不够,能够做到每个连接建立的时候,就自动完成这种映射,令人高兴的是,ORACLE 8i提供了系统级的触发器,让我轻松地实现。

--SCOTT用户登陆触发器

connect system/manager@oracle

CREATE OR REPLACE TRIGGER scott.tg_set_usr_context

AFTER LOGON ON DATABASE

BEGIN

secusr.customer_security_context.set_customerid;

END;

--断掉connection,重新登陆

Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production

With the Partitioning option

JServer Release 8.1.7.0.0 - Production

 

SQL> CONNECT scott/tiger@oracle

已连接。

SQL> select SYS_CONTEXT(''''CUSTOMER_CONTEXT'''',''''CUSTOMERID'''') FROM DUAL;

SYS_CONTEXT(''''CUSTOMER_CONTEXT'''',''''CUSTOMERID'''')

--------------------------------------------------------------------------------

ALFKI

SQL>

好了,够简单吧。

采用Virtual Private Database如何达到SQL DML上的数据控制访问要求呢?

Virtual Private Database技术可以对一张表的记录设置DML操作的过滤策略。ORACLE8i提供了POLICY的概念,并且为此配备了一套系统程序包,来完成设置。下面,我来介绍一下:

connect secusr/secusr@oracle

--做一个函数,返回对应的过滤条件

create or replace package secusr.customer_security is

function customer_sec

return VARCHAR2;

end;

 

create or replace package body secusr.customer_security

is

function customer_sec(d1 varchar2,d2 varchar2)

return varchar2

IS

begin

IF SYS_CONTEXT(''''USERENV'''',''''SESSION_USER'''') IN (''''SYS'''',''''SYSTEM'''',''''SECUSR'''') THEN

   RETURN NULL;

ELSE

   RETURN ''''customerid=''''''''''''|| SYS_CONTEXT(''''CUSTOMER_CONTEXT'''',''''CUSTOMERID'''') || '''''''''''''''';

END IF;

end;

end;

 

--设置表数据的分割过滤

EXECUTE DBMS_RLS.ADD_POLICY(''''SCOTT'''',''''"Customers"'''',''''Customers_sec_Policy'''',

''''SECUSR'''',

''''customer_security.customer_sec'''',

''''SELECT,UPDATE,DELETE'''');

customer_security程序包的customer_sec函数实现了,根据但前的CONTEXT中CUSTOMERID的内容,来返回一个过滤的策略,函数的参数形式是固定的。通过dbms_rls程序包的ADD_POLICY过程,把策略条件同表绑定以来,以后,每次select,update,delete都会自动应用这个策略。

好了,现在我们来测试一下

--用SCOTT登陆,只能看到自己的信息

SQL> connect scott/tiger@oracle;

已连接。

SQL> select customerid,city from "Customers";

 

CUSTOMERID CITY

---------- ------------------------------

ALFKI      Berlin

--用SYSTEM登陆,可以看到所有的

SQL> connect system/manager@oracle;

已连接。

SQL> select customerid,city from "SCOTT"."Customers";

CUSTOMERID CITY

---------- ------------------------------

ALFKI      Berlin

ANATR      México D.F.

ANTON      México D.F.

AROUT      London

BERGS      Lule?   D.F.

BLAUS      Mannheim

BLONP      Strasbourg

BOLID      Madrid

BONAP      Marseille

BOTT

上一页  [1] [2] [3]  下一页


[系统软件]EXP-00008: ORACLE error 904 encountered的解决方…  [常用软件]PB7 连接 Oracle 的配置方法
[VB.NET程序]Public与Private的区别  [Web开发]oracle Export and Import 简介
[Web开发]ADO访问Oracle结果集的心得  [JAVA开发]JDBC+Hibernate将Blob数据写入Oracle
[JAVA开发]J2EE应用中与Oracle数据库的连接  [JAVA开发]Oracle Application Serve_
[其他]HP-UXrx2600B.11.22Uia64安装oracle9i9.2foria64手…  [其他]在RedhatEnterpriseserver3上安装oracle9iR2的注意…
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台