前段时间,做了个实现,发现grant revoke dba权限给一个用户,对已连接的会话不生效,只有之后连接进数据库的session才生效。而grant select on owner.table_name to username,对已连接的会话是即使生效的,具体测试过程如下:
[code]-----session1
SQL> create user dba_test identified by oracle;
User created.
Elapsed: 00:00:00.11
SQL> alter user dba_test account unlock;
User altered.
Elapsed: 00:00:00.05
SQL> grant connect to dba_test;
Grant succeeded.
Elapsed: 00:00:00.07
------session2
SQL> conn dba_test/oracle
Connected.
SQL> select count(*) from dba_tables;
select count(*) from dba_tables
*
ERROR at line 1:
ORA-00942: table or view does not exist
Elapsed: 00:00:00.02
-----------session1
SQL> grant dba to dba_test;
Grant succeeded.
Elapsed: 00:00:00.04
-----------session2
SQL> select count(*) from dba_tables;
select count(*) from dba_tables
*
ERROR at line 1:
ORA-00942: table or view does not exist
Elapsed: 00:00:00.01
-----------session1
SQL> grant select on dba_tables to dba_test;
Grant succeeded.
-----------session2
SQL> select count(*) from dba_tables;
COUNT(*)
----------
3245
Elapsed: 00:00:00.23
--------session2
SQL> conn dba_test/oracle
Connected.
SQL> show user;
USER is "DBA_TEST"
SQL> select count(*) from dba_views;
COUNT(*)
----------
5302
---------session1
SQL> revoke dba from dba_test;
Revoke succeeded.
--------session2
SQL> select count(*) from dba_views;
COUNT(*)
----------
5302
Elapsed: 00:00:00.03
SQL> conn / as sysdba
Connected.
SQL> conn dba_test/oracle
Connected.
SQL> select count(*) from dba_views;
select count(*) from dba_views
*
ERROR at line 1:
ORA-00942: table or view does not exist[/code]
[code]-----session1
SQL> create user dba_test identified by oracle;
User created.
Elapsed: 00:00:00.11
SQL> alter user dba_test account unlock;
User altered.
Elapsed: 00:00:00.05
SQL> grant connect to dba_test;
Grant succeeded.
Elapsed: 00:00:00.07
------session2
SQL> conn dba_test/oracle
Connected.
SQL> select count(*) from dba_tables;
select count(*) from dba_tables
*
ERROR at line 1:
ORA-00942: table or view does not exist
Elapsed: 00:00:00.02
-----------session1
SQL> grant dba to dba_test;
Grant succeeded.
Elapsed: 00:00:00.04
-----------session2
SQL> select count(*) from dba_tables;
select count(*) from dba_tables
*
ERROR at line 1:
ORA-00942: table or view does not exist
Elapsed: 00:00:00.01
-----------session1
SQL> grant select on dba_tables to dba_test;
Grant succeeded.
-----------session2
SQL> select count(*) from dba_tables;
COUNT(*)
----------
3245
Elapsed: 00:00:00.23
--------session2
SQL> conn dba_test/oracle
Connected.
SQL> show user;
USER is "DBA_TEST"
SQL> select count(*) from dba_views;
COUNT(*)
----------
5302
---------session1
SQL> revoke dba from dba_test;
Revoke succeeded.
--------session2
SQL> select count(*) from dba_views;
COUNT(*)
----------
5302
Elapsed: 00:00:00.03
SQL> conn / as sysdba
Connected.
SQL> conn dba_test/oracle
Connected.
SQL> select count(*) from dba_views;
select count(*) from dba_views
*
ERROR at line 1:
ORA-00942: table or view does not exist[/code]
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




