限制DDL操作(四)

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

转载于:http://blog.itpub.net/4227/viewspace-561551/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值