表增加字段出现ORA-28133 全表访问受小粒度安全性的限制

今天收到研发同事的邮件,某个数据库的表增加字段失败,提示ORA-28133 全表访问受小粒度安全性的限制。



首先查找Oracle的错误代码文档,居然没有查找到,于是在网上找到原因,是由于表设置有审计策略的原因。
测试过程如下:
1、创建测试表test

点击(此处)折叠或打开



  1. SQL> create table test (id int);

  2. Table created.

  3. SQL> insert into test values (1);

  4. 1 row created.

  5. SQL> commit;

  6. Commit complete.

  7. SQL> select * from test;

  8.         ID
  9. ----------
  10.          1

2、对TEST表增加字段P_NAME

点击(此处)折叠或打开

  1. SQL> alter table test add p_name varchar2(20) default 'aaa';

  2. Table altered.

  3. SQL> select * from test;

  4.         ID P_NAME
  5. ---------- --------------------
  6.          1 aaa


  7. SQL> insert into test (id) values (2);

  8. 1 row created.

  9. SQL> commit;

  10. Commit complete.

  11. SQL> select * from test;

  12.         ID P_NAME
  13. ---------- --------------------
  14.          1 aaa
  15.          2 aaa
通过以上测试对表增加字段并设置默认值 是没有问题的

3、对TEST表增加审计策略,再测试增加字段

点击(此处)折叠或打开

  1. SQL> begin
  2.   2 Dbms_fga.add_policy(
  3.   3 object_schema=>'TEST',
  4.   4 object_name=>'TEST',
  5.   5 policy_name=>'TEST_AUDIT',
  6.   6 statement_types=>'update,delete'
  7.   7 );
  8.   8 end;
  9.   9 /

  10. PL/SQL procedure successfully completed.

  11. SQL> alter table test add address varchar2(200) default 'beijing';
  12. alter table test add address varchar2(200) default 'beijing'
  13. *
  14. ERROR at line 1:
  15. ORA-00604: error occurred at recursive SQL level 1
  16. ORA-28133: full table access is restricted by fine-grained security
在增加了审计策略后,对表增加字段同时设置默认值时操作失败


4、禁用审计策略后,对表增加字段同时设置默认值

点击(此处)折叠或打开

  1. SQL> begin
  2.   2 Dbms_fga.disable_policy(
  3.   3 object_schema=>'TEST',
  4.   4 object_name=>'TEST',
  5.   5 policy_name=>'TEST_AUDIT'
  6.   6 );
  7.   7 end;
  8.   8 /

  9. PL/SQL procedure successfully completed.

  10. SQL> alter table test add address varchar2(200) default 'beijing';

  11. Table altered.

  12. SQL> select * from test;

  13.         ID P_NAME ADDRESS
  14. ---------- -------------------- --------------------
  15.          1 aaa beijing
  16.          2 aaa beijing
禁用了表的审计策略后,增加字段同时设置默认值 时操作成功



结论,当表设置有审计策略时对于增加字段同时设置默认值时,操作会失败。如果只是增加字段并不设置默认值时,不受审计策略的影响。

上面无法执行的SQL语句,除了禁用审计策略外,还可以分成2步执行:

点击(此处)折叠或打开

  1. alter table test add address varchar2(200);
  2. alter table test modify address varchar2(200) default 'beijing';






来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/2317695/viewspace-2098219/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/2317695/viewspace-2098219/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值