获取Oracle SQL的表特权

时间:2019-04-16 03:44:09

标签: sql oracle oracle-sqldeveloper

Oracle数据库中有一个表列表,我想对其进行测试,以确定我是否具有读取数据的特权。我只知道;

select * from all_tables

它返回我拥有的表,但是在某些情况下,数据无法提供给我。

除了遍历表列表和select每个表之外,还有一种快速的方法吗?

我不是管理员,因此宁愿使用一种快速的方法,也不希望每次与DBA来回交流。

1 个答案:

答案 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>