http://turner.itpub.net/post/2343/67186
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:显示标准审计与精细审计的审计记录。