限制DDL操作(四)

yangtingkun發表於2009-03-05

出於安全性或避免影響效能的考慮,在產品資料庫中有時候會禁止或者在一定時間段內限制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 VaultCOMMAND 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 TABLECOMMAND 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語句,包括DMLSELECTALTER SYSTEMALTER SESSION、甚至CONNECT都是可以限制或允許的。

這種方法無疑是最靈活的,而且設定也不困難,一個過程呼叫足以。唯一的缺點是必須VAULT元件的支援。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-561551/,如需轉載,請註明出處,否則將追究法律責任。

相關文章