动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.甲骨文函数大全.
.详细讲解Oracle数据库运行错误的.
.ORACLE之APACHE虚拟服务器设置.
.2Gb or Not 2Gb.
.Windows 2000下优化Oracle9i性能.
.SQLPlus使用技巧点滴.
.Oracle学习之Oracle分析函数(二.
.Oracle中对两个数据表交集查询简.
.在Adaptive Server Anywhere和Or.
.tivoli+rman实现自动将rman备份写.
.Oracle里的交叉SQL语句写法.
.Oracle SQL性能优化系列讲座之三.
.KDD-数据库中的知识发现.
.ORACLE大數据類型的操作之一CLOB.
.CSDN Oracle电子杂志创刊号发布.
.Oracle数据库安全策略分析(二).
.在Oracle数据库中连接异种数据源.
.Linux系统响应速度性能改进实例.
.理解数据库的统计集聚函数.
.Oracle进程导致CPU 100%解决步骤.

实现数据行的权限控制(Policy的应用)

发表日期:2008-2-9 |



  1 前言
  数据访问权限控制,是一个古老而又实际的问题。
  在大部份系统中,权限控制主要定义为模块进入权限的控制和数据列访问权限的控制(如:某某人可以进入某个控制,仓库不充许查看有关金额的字段等等)。
  但在某些系统中,权限控制又必须定义到数据行访问权限的控制,此需求一般出现在同一系统,不同的相对独立机构使用的情况。(如:集团下属多个子公司,所有子公司使用同一套数据表,但不同子公司的数据相对隔离)
  当然,绝大多数人会选择在View加上Where子句来进行数据隔离。此方法编码工作量大、系统适应用户治理体系的弹性空间较小,一旦权限逻辑发生变动,就可能需要修改权限体系,导致所有的View都必须修改。
  本文探讨的使用Oracle提供的Policy治理方法来实现数据行的隔离。
  
  非凡感谢Javac兄提出的此解决方案!
  
  2 实现
  2.1 Oracle Policy的简单说明
  Policy应用于数据行访问权限控制时,其作用简而言之,就是在查询数据表时,自动在查询结果上加上一个Where子句。假如该查询已有where子句,则在该Where子句后面加上"And ..."。
  由Oracle Policy自动加入的Where子句的内容,通常由一个函数来实现。而进行数据行访问权限控制算法实现的结果,也是通过该函数返回。
  
  2.2 Oracle Policy的语法简述
  2.2.1 新增Policy
  Dbms_Rls.Add_Policy(Object_Schema --数据表(或视图)所在的Schema名称
  ,Object_Name --数据表(或视图)的名称
  ,Policy_Name --POLICY的名称,主要用于将来对Policy的治理
  ,Function_Schema --返回Where子句的函数所在Schema名称
  ,Policy_Function --返回Where子句的函数名称
  ,Statement_Types --要使用该Policy的DML类型,如'Select,Insert,Update,Delete'
  ,Update_Check --仅适用于Statement_Type为'Insert,Update',值为'True'或'False'
  ,Enable --是否启用,值为'True'或'False'
  );
  注:假如Update_Check设为'True',则用户插入的值不符合Policy_Function返回条件时,该DML执行返回错误信息。
  2.2.2 删除Policy
  Dbms_Rls.drop_policy(object_schema --要删除的Policy所在的Schema
  ,object_name --要删除Policy的数据表(或视图)名称
  ,policy_name --要删除的Policy名称
  );
  
  2.2.3 设定Policy状态
  Dbms_Rls.Enable_Policy(object_schema --要删除的Policy所在的Schema
  ,object_name --要删除Policy的数据表(或视图)名称
  ,policy_name --要删除的Policy名称
  ,Enable --是否启用,值为'True'或'False'
  );
  
  2.3 Policy使用特性及使用建议
  ● 一个数据表(或视图)可以有多个Policy,但Policy的名称在整个Schema范围内不答应重复。
  ● 假如将Policy指定到视图,则删除Policy后,应重新编译该视图,否则User_Updatable_Columns系统字典表返回的是否可新增修改删除的信息可能会全部为“NOT”。
  ● 通过Policy可以限制用户对数据表记录的操作范围。假如Policy加在数据表,则由于前台涉及的数据源(通常是视图)往往涉及许多张数据表,权限控制难度很大,建议将Policy加在视图。
  
  3 Oracle Policy 应用实例
  --3.1 创建测试数据表
  Create Table T_Policy(T1 Varchar2(10),T2 Number(10));
  --3.2 创建测试的Policy函数
  CREATE OR REPLACE Function Fn_GetPolicy (P_Schema In Varchar2
  ,P_Object In Varchar2)
  Return Varchar2
  Is
  Begin
  Return 'T2=10';
  End;
  
  --3.3 插入测试数据
  Insert Into T_Policy Values('a',10);
  Insert Into T_Policy Values('b',10);
  Insert Into T_Policy Values('c',20);
  Commit;
  --3.4 加入Policy
  Begin
  Dbms_Rls.Add_Policy(Object_Schema =>'Scott'
  ,Object_Name =>'T_Policy'
  ,Policy_Name =>'T_TestPolicy'
  ,Function_Schema =>'Scott'
  ,Policy_Function =>'Fn_GetPolicy'
  ,Statement_Types =>'Select,Insert,Update,Delete'
  ,Update_Check =>'True'
  ,Enable =>'True'
  );
  End;
  --3.5 测试Policy
  Select * From T_Policy;
  Insert Into T_Policy Values ('d',10);
  Insert Into T_Policy Values ('d',20);
  Commit;
  
  --3.6 查看Policyy设定情况
  Select * From user_policies;
  
  --重要提示:执行Dbms_Rls.Add_Policy时,必须将执行Dbms_Rls包执行的权限授予Scott。
测试时也可能使用其它Schema,最简单的方法是将测试的Schame设为“DBA”权限。
上一篇:数据表历史数据的显示 人气:624
下一篇:性检查的简单快捷方法(利用Post方法和Timer) 人气:435
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-6 Menalto Gallery v2.3 Rc2 多国语
2008-10-6 花香盈路(Hxcms) v9.0
2008-10-6 华军软件下载系统 v1.5
2008-10-6 e107 v0.7.13
2008-10-6 (开源PHP框架) CodeIgniter v1.6
2008-10-6 PHP在线考试系统PPExam v1.2.6 b
2008-10-6 SiteDynamic企业网站管理系统 v1
2008-10-6 WebPlayer9 P2P视频点播电影整站
2008-10-6 BCMS v1.1 测试版
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成