ITPub博客

首页 > 数据库 > Oracle > 表增加字段出现ORA-28133 全表访问受小粒度安全性的限制

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

原创 Oracle 作者:东北胖子 时间:2016-05-12 00:53:02 0 删除 编辑
今天收到研发同事的邮件,某个数据库的表增加字段失败,提示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博客 ” ,链接:https://blog.itpub.net/2317695/viewspace-2098219/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-03-09

  • 博文量
    77
  • 访问量
    204988