今天在bbs上看到一位网友提出:新增用户只能查询当前用户所有表,于是简单地测试了一下:
SQL> create user aaa identified by bbb;
用户已创建。
SQL> grant select any table to aaa;
授权成功。
SQL> grant connect to aaa;
授权成功。
SQL> conn aaa/bbb
已连接。
SQL> select * from t1;
select * from t1
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from system.t1;
TABLE_NAME STATUS
------------------------------ --------
MVIEW$_ADV_WORKLOAD VALID
MVIEW$_ADV_BASETABLE VALID
MVIEW$_ADV_SQLDEPEND VALID
MVIEW$_ADV_PRETTY VALID
MVIEW$_ADV_TEMP VALID
MVIEW$_ADV_FILTER VALID
MVIEW$_ADV_LOG VALID
MVIEW$_ADV_FILTERINSTANCE VALID
MVIEW$_ADV_LEVEL VALID
MVIEW$_ADV_ROLLUP VALID
MVIEW$_ADV_WORKLOAD VALID
TABLE_NAME STATUS
------------------------------ --------
MVIEW$_ADV_BASETABLE VALID
MVIEW$_ADV_SQLDEPEND VALID
MVIEW$_ADV_PRETTY VALID
MVIEW$_ADV_TEMP VALID
MVIEW$_ADV_FILTER VALID
MVIEW$_ADV_LOG VALID
MVIEW$_ADV_FILTERINSTANCE VALID
MVIEW$_ADV_LEVEL VALID
MVIEW$_ADV_ROLLUP VALID
已选择20行。
SQL> conn system/bbb
已连接。
SQL> revoke select any table from aaa;
撤销成功。
SQL> conn aaa/bbb
已连接。
SQL> select * from system.t1;
select * from system.t1
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from system.t1;
select * from system.t1
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
SQL>
结论:grant select any table to user 可以实现只查询当前用户所有表,但是在查询时,一定要在表名前加上该表的所有者。