Oracle数据库中有一个表列表,我想对其进行测试,以确定我是否具有读取数据的特权。我只知道;
select * from all_tables
它返回我拥有的表,但是在某些情况下,数据无法提供给我。
除了遍历表列表和select
每个表之外,还有一种快速的方法吗?
我不是管理员,因此宁愿使用一种快速的方法,也不希望每次与DBA来回交流。
答案 0 :(得分:2)
看来你弄错了。
ALL_TABLES
显示-顾名思义-您可以访问的所有表,而不是(如您所说的,您拥有的表-这些表包含在USER_TABLES
中)
这是一个快速测试:
SQL> connect mike/lion@orcl
Connected.
SQL> select count(*) from all_tables;
COUNT(*)
----------
111
SQL> select table_name from all_tables where owner = 'SCOTT';
TABLE_NAME
------------------------------
BONUS
SQL> connect scott/tiger@orcl
Connected.
SQL> grant select on emp to mike;
Grant succeeded.
SQL> connect mike/lion@orcl
Connected.
SQL> select count(*) from all_tables;
COUNT(*)
----------
112
SQL> select table_name from all_tables where owner = 'SCOTT';
TABLE_NAME
------------------------------
EMP
BONUS
SQL>
SELECT
特权是您感兴趣的(“ ...尤其是读取数据”),因此-事情就这样了:一旦获得特权,该表就会出现< / em>在ALL_TABLES
中。无需调试DBA。
[编辑]
表可以在ALL_TABLES中列出,但是您没有权限从中选择。这是一个示例:
SQL> connect scott/tiger@orcl
Connected.
SQL> revoke select on emp from mike;
Revoke succeeded.
SQL> grant insert on dept to mike;
Grant succeeded.
SQL> connect mike/lion@orcl
Connected.
SQL> select count(*) from all_tables;
COUNT(*)
----------
112
SQL> select table_name from all_tables where owner = 'SCOTT';
TABLE_NAME
------------------------------
DEPT
BONUS
SQL> select * from scott.dept;
select * from scott.dept
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL>
要检查您拥有的特权,请运行
SQL> select table_name, privilege from all_tab_privs where grantor = 'SCOTT';
TABLE_NAME PRIVILEGE
------------------------------ ----------------------------------------
BONUS UPDATE
BONUS SELECT
BONUS INSERT
BONUS DELETE
DEPT INSERT --> see? Only INSERT on DEPT
SQL>