出于安全性或避免影响性能的考虑,在产品数据库中有时候会禁止或者在一定时间段内限制DDL语句的发生。Oracle也提高了很多方法来实现这个功能,这个简单介绍一下。
这篇介绍VAULT组件的COMMAND RULE功能。
限制DDL操作(一):http://yangtingkun.itpub.net/post/468/479244
限制DDL操作(二):http://yangtingkun.itpub.net/post/468/479277
限制DDL操作(三):http://yangtingkun.itpub.net/post/468/479290
前面介绍的三种方法各有各的有缺点。如果数据库安装了VAULT组件,那么限制DDL语句将是很简单的功能。
Oracle Vault的COMMAND RULE功能,可以在不同的粒度上控制DDL语句的访问。
SQL> CONN TEST/TEST
Connected.
SQL> CREATE TABLE T (ID NUMBER);
Table created.
SQL> CREATE TABLE T1 (ID NUMBER);
Table created.
SQL> DROP TABLE T1 PURGE;
Table dropped.
SQL> CONN DVOWNER
Enter password:
Connected.
SQL> SELECT *
2 FROM V$OPTION
3 WHERE PARAMETER = 'Oracle Database Vault';
PARAMETER VALUE
---------------------------------------- ------------------------------
Oracle Database Vault TRUE
SQL> EXEC DBMS_MACADM.CREATE_COMMAND_RULE('DROP TABLE', 'Disabled', 'TEST', '%', 'Y')
PL/SQL procedure successfully completed.
SQL> CONN TEST/TEST
Connected.
SQL> DROP TABLE T;
DROP TABLE T
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-47400: Command Rule violation for drop table on TEST.T
ORA-06512: at "DVSYS.AUTHORIZE_EVENT", line 55
ORA-06512: at line 31
通过建立了一个DROP TABLE的COMMAND RULE,并将这个RULE添加到Disabled这个RULE SET中,就禁止了TEST用户下对所有对象的DROP TABLE语句。
这个粒度完全可以控制到对象级,比如修改一下COMMAND RULE,将DROP TABLE的限制改变为限制删除T表,而其他表允许删除:
SQL> CONN DVOWNER
Enter password:
Connected.
SQL> EXEC DBMS_MACADM.DELETE_COMMAND_RULE('DROP TABLE', 'TEST', '%')
PL/SQL procedure successfully completed.
SQL> EXEC DBMS_MACADM.CREATE_COMMAND_RULE('DROP TABLE', 'Disabled', 'TEST', 'T', 'Y')
PL/SQL procedure successfully completed.
SQL> CONN TEST/TEST
Connected.
SQL> DROP TABLE T PURGE;
DROP TABLE T PURGE
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-47400: Command Rule violation for drop table on TEST.T
ORA-06512: at "DVSYS.AUTHORIZE_EVENT", line 55
ORA-06512: at line 31
SQL> CREATE TABLE T2 (ID NUMBER);
Table created.
SQL> DROP TABLE T2;
Table dropped.
使用这个方法,不仅仅可以限制DDL语句,包括DML、SELECT、ALTER SYSTEM、ALTER SESSION、甚至CONNECT都是可以限制或允许的。
这种方法无疑是最灵活的,而且设置也不困难,一个过程调用足以。唯一的缺点是必须VAULT组件的支持。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-561551/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-561551/