今天收到研发同事的邮件,某个数据库的表增加字段失败,提示ORA-28133 全表访问受小粒度安全性的限制。
![](//img.blog.itpub.net/blog/attachment/201605/12/2317695_1462984090IVBz.png?x-oss-process=style/bb)
首先查找Oracle的错误代码文档,居然没有查找到,于是在网上找到原因,是由于表设置有审计策略的原因。
测试过程如下:
1、创建测试表test
2、对TEST表增加字段P_NAME
通过以上测试对表增加字段并设置默认值 是没有问题的
3、对TEST表增加审计策略,再测试增加字段
在增加了审计策略后,对表增加字段同时设置默认值时操作失败
4、禁用审计策略后,对表增加字段同时设置默认值
禁用了表的审计策略后,增加字段同时设置默认值 时操作成功
结论,当表设置有审计策略时对于增加字段同时设置默认值时,操作会失败。如果只是增加字段并不设置默认值时,不受审计策略的影响。
上面无法执行的SQL语句,除了禁用审计策略外,还可以分成2步执行:
![](http://img.blog.itpub.net/blog/attachment/201605/12/2317695_1462984090IVBz.png?x-oss-process=style/bb)
首先查找Oracle的错误代码文档,居然没有查找到,于是在网上找到原因,是由于表设置有审计策略的原因。
测试过程如下:
1、创建测试表test
点击(此处)折叠或打开
-
-
- SQL> create table test (id int);
-
- Table created.
-
- SQL> insert into test values (1);
-
- 1 row created.
-
- SQL> commit;
-
- Commit complete.
-
- SQL> select * from test;
-
- ID
- ----------
- 1
2、对TEST表增加字段P_NAME
点击(此处)折叠或打开
- SQL> alter table test add p_name varchar2(20) default 'aaa';
-
- Table altered.
-
- SQL> select * from test;
-
- ID P_NAME
- ---------- --------------------
- 1 aaa
-
-
- SQL> insert into test (id) values (2);
-
- 1 row created.
-
- SQL> commit;
-
- Commit complete.
-
- SQL> select * from test;
-
- ID P_NAME
- ---------- --------------------
- 1 aaa
- 2 aaa
3、对TEST表增加审计策略,再测试增加字段
点击(此处)折叠或打开
- SQL> begin
- 2 Dbms_fga.add_policy(
- 3 object_schema=>'TEST',
- 4 object_name=>'TEST',
- 5 policy_name=>'TEST_AUDIT',
- 6 statement_types=>'update,delete'
- 7 );
- 8 end;
- 9 /
-
- PL/SQL procedure successfully completed.
-
- SQL> alter table test add address varchar2(200) default 'beijing';
- alter table test add address varchar2(200) default 'beijing'
- *
- ERROR at line 1:
- ORA-00604: error occurred at recursive SQL level 1
- ORA-28133: full table access is restricted by fine-grained security
4、禁用审计策略后,对表增加字段同时设置默认值
点击(此处)折叠或打开
- SQL> begin
- 2 Dbms_fga.disable_policy(
- 3 object_schema=>'TEST',
- 4 object_name=>'TEST',
- 5 policy_name=>'TEST_AUDIT'
- 6 );
- 7 end;
- 8 /
-
- PL/SQL procedure successfully completed.
-
- SQL> alter table test add address varchar2(200) default 'beijing';
-
- Table altered.
-
- SQL> select * from test;
-
- ID P_NAME ADDRESS
- ---------- -------------------- --------------------
- 1 aaa beijing
- 2 aaa beijing
结论,当表设置有审计策略时对于增加字段同时设置默认值时,操作会失败。如果只是增加字段并不设置默认值时,不受审计策略的影响。
上面无法执行的SQL语句,除了禁用审计策略外,还可以分成2步执行:
点击(此处)折叠或打开
- alter table test add address varchar2(200);
- alter table test modify address varchar2(200) default 'beijing';
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/2317695/viewspace-2098219/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/2317695/viewspace-2098219/