DBMS_RLS.SHARED_STATIC以及DBMS_RLS.SHARED_CONTEXT_SENSTIVE

原创 2008年10月02日 19:43:00
5.VPD策略类型
运行策略函数需要大量的系统资源,因此,将策略函数运行次数降低可以提高性能。Oracle8i和9i都是动态的。Oracle 10g中又引入了静态和上下文敏感等策略。10g中可用的类型有:
1)动态(默认)
2)静态
3)共享-静态
4)上下文敏感
5)共享-上下文敏感

6.静态策略类型
对于静态策略类型,我们可以将参数POLICY_TYPE的值指定为DBMS_RLS.STATIC。在静态的策略类型中,谓词在不同运行环境下都是相同的。静态策略函数运行一次,并且被缓存到SGA,这样静态策略函数就非常快。访问相同对象的语句不需要重复运行策略函数,当然根据SYS_CONTEXT和SYSDATE这样的属性不同,每次运行也可以产生不同的结果。
7.共享-静态策略类型
当一个函数用于多个策略中的时候,我们称之为共享策略。共享策略可以在多个对象的业务处理策略相同的时候,不必为每个对象都创建一个策略函数。我们应该将POLICY_TYPE设置为DBMS_RLS.SHARED_STATIC。它的处理方式与STATIC相同。
8.上下文敏感策略
我们需要将参数POLICY_TYPE的值指定为DBMS_RLS.CONTEXT_SENSITIVE。如果数据库发现自上次使用以后,运行的上下文环境发生了变化,那么就会对上下文敏感策略函数重新求值。
9.共享-上下文敏感策略类型
与上下文敏感策略类似,只不过函数是可以共享的。我们需要将POLICY_TYPE指定为DBMS_RLS.SHARED_CONTEXT_SENSTIVE。
10.其他VPD增强功能
在Oracle 10g中,DBMS_RLS.ADD_POLICY的过程中STATEMENT_TYPES参数可接收一种新的类型:INDEX。在Oracle 9i中,有效值是SELECT、INSERT、UPDATE、DELETE。Oracle 10g默认是应用除了INDEX的所有类型。引入INDEX类型是为了增强索引维护操作方面的安全策略,也就是用户需要有全部表的访问权才能创建表的索引。
Oracle 10g在ADD_POLICY过程中所作的另一个方面的增强在于参数LONG_PREDICATE。这个新的参数默认是FALSE,表示策略函数最多返回4000字节的谓词。当这个参数被设置为TRUE时,策略函数返回的文本串可以达到32K。
11.审计功能的增强
Oralce 数据库的审计(auditing)操作就是对用户在数据库中指定的操作进行监视和记录。10g具有下列类型的审核功能:
1)强制审计
强制审计可以对sysoper和sysdba进行审核
2)标准审计
设置初始化参数AUDIT_TRAIL即可启用数据库的审计功能。审计功能启用后,我们可以指定要审计的对象以及操作类型。例如,AUDIT UPDATE ON HR.EMPLOYEES语句启用的是对HR.EMPLOYEES表上的所有更新操作的审计。审计信息写入SYS.AUD$表,可以通过DBA_AUDIT_OBJECT来查询。
3)详细审计
详细审计,也叫精细审计(fine-graind auditing,FGA)是根据内容进行审计。FGA使用的是人们为对象添加的策略。策略可以具有复杂的含义,以便于确定数据是否对特定的查询、条件和访问的数据创建审计记录。
12.精细审核(FGA)的DML支持
FGA是Oracle 9i中引入的,当时它只支持SELECT语句。在Oracle 10g中,FGA支持SELECT、UPDATE和DELETE。过程DBMS_FGA的ADD_POLICY现在有了一个新的STATEMENT_TYPES函数,用于指定要审计的操作类型。下面我们对employee表进行精细审计,审计在这个表上进行了一些SELECT和UPDATE语句,并且语句操作的对象是薪金超过10000美元的行中的薪金列。我们可以这样定义这个FGA策略:
SQL> BEGIN
DBMS_FGA.ADD_POLICY(
policy_name => ’AUD_EMPLOYEE_SAL’,
object_schema => ’HR’,
object_name => ’EMPLOYEE’,
audit_column => ’SALARY’,
audit_condition => ’SALARY >= 10000’,
statement_types => ’SELECT, UPDATE’);
END;
SQL> /
PL/SQL procedure successfully completed.
现在,用户DAVID正在对员工表进行更新和选择操作,并且负荷审计条件:
SQL> show user
USER is "DAVID"
SQL> UPDATE hr.employee SET salary = 20000 WHERE first_name = ’NEENA’;
1 row updated.
SQL> SELECT first_name FROM hr.employee WHERE salary > 15000;
FIRST_NAME
--------------------
NEENA
LEX
现在我们来查询FGA审计日志,察看审计信息:
SQL> SELECT dbuid, lsqltext FROM sys.fga_log$;
DAVID
UPDATE hr.employee
SET salary = 20000
WHERE first_name = ’NEENA’
DAVID
SELECT first_name
FROM hr.employee
WHERE salary > 15000
13.10g的FGA可以做到只有同时访问组合列的时候才进行审计。例如使用了员工姓名和薪金的查询。为了实现这个审计,首先将AUDIT_COLUMN设为’SALARY,FIRST_NAME’,然后将AUDIT_COLUMN_OPTS设置为DBMS_FGA.ALL_COLUMNS,例如:
SQL> BEGIN
DBMS_FGA.ADD_POLICY(
policy_name => ’AUD_EMPLOYEE_SAL_FN’,
object_schema => ’HR’,
object_name => ’EMPLOYEE’,
audit_column => ’SALARY, FIRST_NAME’,
statement_types => ’SELECT, UPDATE’,
audit_column_opts => DBMS_FGA.ALL_COLUMNS,
audit_trail => DBMS_FGA.DB);
END;
SQL> /
PL/SQL procedure successfully completed.
14.统一的审计线索(审计跟踪,Audit Trail)
Oracle 10g在标准审计和详细审计中跟踪记录的列是相同的。数据库审计线索(audit trail)AUD$是SYS方案的一个专门的表。FGA的审计线索名叫FGA_LOG$。当初始化参数AUDIT_TRAIL设置为DB_EXTENDED时,用户运行SQL语句的具体形式以及SQL中附带的变量会被收集到审计线索中。
15.带审计信息的DBA字典
1)DBA_AUDIT_TRAIL:显示标准审计的全部审计跟踪记录
2)DBA_AUDIT_EXISTS:显示由AUDIT EXISTS和AUDIT NOT EXISTS生成的审计跟踪记录
3)DBA_AUDIT_OBJECT:显示数据库中所有对象的审计跟踪(DML和DDL)
4)DBA_AUDIT_SESSION:显示会话连接和断开连接的审计跟踪(AUDIT SESSION)
5)DBA_AUDIT_STATEMNET:显示语句GRANT、REVOKE、AUDIT、NOAUDIT和ALTER SYSTEM的审计跟踪记录
6)DBA_OBJ_AUDIT_OPTIONS:指出数据库中所审计的对象的审计选项
7)DBA_FGA_AUDIT_TRAIL:显示详细审计的全部审计跟踪记录
8)DBA_AUDIT_POLICY:显示FGA的审计策略
9)DBA_AUDIT_POLICY_COLUMNS:显示数据库中各策略的策略名称和列名
10)DBA_COMMON_AUDIT_TRAIL:显示标准审计与精细审计的审计记录。

本文转自
http://turner.itpub.net/post/2343/67186

[hdu-2048] 神、上帝以及老天爷

神、上帝以及老天爷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To...
  • u011506951
  • u011506951
  • 2014年05月06日 19:54
  • 1488

作用域public,private,protected,以及不写时的区别

C++中和JAVA中,public、private、 protected 的用法不完全一样。 C++中: public修饰的成员变量或方法可以被任意其他的类访问。private修饰的成员变...
  • u013126379
  • u013126379
  • 2016年08月29日 23:16
  • 5407

数列求和-加强版 PAT

原题如下: 给定某数字AA(1\le A\le 91≤A≤9)以及非负整数NN(0\le N\le 1000000≤N≤100000),求数列之和S = A + AA + AAA...
  • loushuqiwo
  • loushuqiwo
  • 2016年03月04日 22:35
  • 1181

Oracle策略的使用(dbms_rls.add_policy)

数据访问控制权限,是一个在实际项目中用得很平常的问题。比如公司部门,就工资来说,本人只能看到自己的工资信息,不能看到其他同事的信息,部门经理或更高级别的人可以看到他对应权限的信息,看到这里大多数人会选...
  • u011109042
  • u011109042
  • 2016年07月14日 17:00
  • 921

DBMS_RLS包实现数据库表行级安全控制

DBMS_RLS 是实现数据库表行级别安全控制的,这个包包含精细访问控制管理接口,这个接口是用来实现VPD(Virtual Private Database),虚拟私有数据库。DBMS_RLS只能在O...
  • waterxcfg304
  • waterxcfg304
  • 2014年06月09日 11:30
  • 2523

dbms_rls

包dbms_rls只适用oracle enterprise edition,他实现精细的访问控制;   并且精细的访问控制是通过sql语句中动态增加谓词(where 子句)实现的;可以使不同的数...
  • weixin_36408281
  • weixin_36408281
  • 2016年11月26日 21:47
  • 137

EnterpriseDB’s Virtual Private Database vs oracle’s DBMS_RLS

Oracle的dbms_rls实现数据访问控制 在大部份系统中,权限控制主要定义为模块进入权限的控制和数据列访问权限的控制(如:某某人可以进入某个控制,仓库不充许查看有关部门的字段等等)。 但...
  • BeiiGang
  • BeiiGang
  • 2012年12月12日 17:22
  • 1490

DBMS_SHARED_POOL.PURGE 如何让游标cursor失效,如何清除占用共享池过大的游标

场景1:执行计划走错了,你重新分析了表,发现ORACLE依然在用之前错误的执行计划,新的统计信息没有起作用。 场景2:有一条SQL占用的共享池内存过大,你想把这个游标清理出去 通常有以下几种办法:...
  • jiujiuaiqi
  • jiujiuaiqi
  • 2011年09月27日 12:57
  • 1890

使用DBMS_SHARED_POOL包将对象固定到共享池

--******************************************-- 使用DBMS_SHARED_POOL包将对象固定到共享池--***********************...
  • robinson_0612
  • robinson_0612
  • 2011年06月24日 09:45
  • 5142

dbms_shared_pool.purge

SQL> select sql_id, address, hash_value, executions, loads, parse_calls, invalidations 2 from v$sql...
  • rgb_rgb
  • rgb_rgb
  • 2012年04月04日 21:46
  • 1430
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DBMS_RLS.SHARED_STATIC以及DBMS_RLS.SHARED_CONTEXT_SENSTIVE
举报原因:
原因补充:

(最多只允许输入30个字)