这篇文章通过例子讨论sql92_security初始化参数的作用。
sql92_security
Oracle 11.1.0:
| Parameter Name: | sql92_security | ||
| Description: | require select privilege for searched update/delete | ||
| Type: | BOOL | Obsoleted: | FALSE |
| Can ALTER SESSION: | FALSE | Can ALTER SYSTEM: | FALSE |
参考文章:http://www.orafaq.com/parms/parm1917.htm
当sql92_security被设置成TRUE时,对表执行UPDATE/DELETE操作时会检查当前用户是否具备相应表的SELECT权限。下面的例子展示了该参数的作用:
C:\Users\LIUBINGLIN>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on 星期二 5月 21 18:17:45 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> show parameter sql92
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
sql92_security boolean
FALSE
SQL> show user
USER 为 "SYS"
SQL> select * from a.atest;
ID NAME
---------- ----------------------------------------
1 aaa
2 bbb
3 ccc
4 ddd
SQL> grant update,delete on a.atest to b;
授权成功。
SQL> connect b/oracle123123
已连接。
SQL> select * from a.atest;
select * from a.atest
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> delete from a.atest where id=4;
已删除 1 行。
SQL> commit;
提交完成。
SQL> update a.atest set name='abc' where id=3;
已更新 1 行。
SQL> commit;
提交完成。
SQL> connect / as sysdba
已连接。
SQL> select * from a.atest;
ID NAME
---------- ----------------------------------------
1 aaa
2 bbb
3 abc
SQL> show parameter sql92
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
sql92_security boolean
FALSE
SQL> alter system set sql92_security=true scope=spfile;
系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 263639040 bytes
Fixed Size 1384012 bytes
Variable Size 167772596 bytes
Database Buffers 88080384 bytes
Redo Buffers 6402048 bytes
数据库装载完毕。
数据库已经打开。
SQL> connect b/oracle123123
已连接。
SQL> select * from a.atest;
select * from a.atest
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> delete from a.atest where id=3;
delete from a.atest where id=3
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> update a.atest set id='abc' where id=2;
update a.atest set id='abc' where id=2
*
第 1 行出现错误:
ORA-01031: 权限不足
SQL> connect / as sysdba
已连接。
SQL> grant select on a.atest to b;
授权成功。
SQL> connect b/oracle123123
已连接。
SQL> delete from a.atest where id=3;
已删除 1 行。
SQL> commit;
提交完成。
SQL> update a.atest set name='abc' where id=2;
已更新 1 行。
SQL> commit;
提交完成。
SQL> select * from a.atest;
ID NAME
---------- ----------------------------------------
1 aaa
2 abc
--end--