ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 限制DDL操作(四)

限制DDL操作(四)

原创 Linux操作系统 作者:yangtingkun 时间:2009-03-05 21:15:44 0 删除 编辑

出于安全性或避免影响性能的考虑,在产品数据库中有时候会禁止或者在一定时间段内限制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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 输入TIMESTAMP类型
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10441534