129.A database user SMITH tries to query the V$SESSION view and fails to access it as follows:
SQL> connect smith/smith
Connected.
SQL> SELECT * FROM v$session;
SELECT * FROM v$session
*
ERROR at line 1:
ORA-00942: table or view does not exist
Which are the two possible solutions to enable SMITH to query the data in V$SESSION? (Choose two.)
A.granting SELECT privilege to SMITH on V$SESSION
B.granting SELECT privilege to SMITH on V_$SESSION
C.asking the user SMITH to run the catalog.sql script
D.granting SELECT privilege to SMITH on V$FIXED_TABLES
E.setting the O7_DICTIONARY_ACCESSIBILITY parameter to TRUE
F.creating a view based on V$SESSION and granting SELECT privilege to SMITH on the view that was created
答案:BF
解析:
我们先看下v$session是啥
SQL> select * from dict where table_name='V$SESSION'
TABLE_NAME COMMENTS
---------- ------------------------------
V$SESSION Synonym for V_$SESSION
SQL> select owner,object_name,object_type from dba_objects where object_name='V$SESSION'
OWNER OBJECT_NAM OBJECT_TYPE
---------- ---------- -------------------
PUBLIC V$SESSION SYNONYM
SQL> select dbms_metadata.get_ddl('SYNONYM','V$SESSION','PUBLIC') from dual;
DBMS_METADATA.GET_DDL('SYNONYM','V$SESSION','PUBLIC')
--------------------------------------------------------------------------------
CREATE OR REPLACE PUBLIC SYNONYM "V$SESSION" FOR "SYS"."V_$SESSION"
--这里我们测试一下,看是否由一个同义词的select权限而没有对应的原始对象的权限是否可以
SQL> conn scott/tiger
Connected.
SQL> select * from dept; --这里是scott用户下具有dept表
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> conn hr/hr
Connected.
SQL> select * from scott.dept; --这里hr不具有访问scott中dept的权限
select * from scott.dept
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn scott/tiger
Connected.
SQL> create public synonym sdept for scott.dept; --创建一个public的synonym
Synonym created.
SQL> select * from sdept; --创建成功
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> conn / as sysdba
Connected.
SQL> select * from sdept; --sys可以访问
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> conn hr/hr
Connected.
SQL> select * from sdept; --hr还是不行
select * from sdept
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn scott/tiger
Connected.
SQL> grant select on dept to hr;
Grant succeeded.
SQL> conn hr/hr
Connected.
SQL> select * from sdept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
我们在测试一下视图
SQL> revoke select on dept from hr;
Revoke succeeded.
SQL> create view vdept as select * from dept;
View created.
SQL> grant select on vdept to hr;
Grant succeeded.
SQL> conn hr/hr
Connected.
SQL> select * from scott.dept;
select * from scott.dept
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select * from scott.vdept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
因此:具有视图的select,不需要对原始的对象具有select,而同义词则不可以 AC正确
通过运行catalog.sql可以创建数据字典C错误
O7_DICTIONARY_ACCESSIBILITY还需要select any table因此E错误
V$FIXED_TABLES只是一个动态性能视图,因此D错误
SQL> connect smith/smith
Connected.
SQL> SELECT * FROM v$session;
SELECT * FROM v$session
*
ERROR at line 1:
ORA-00942: table or view does not exist
Which are the two possible solutions to enable SMITH to query the data in V$SESSION? (Choose two.)
A.granting SELECT privilege to SMITH on V$SESSION
B.granting SELECT privilege to SMITH on V_$SESSION
C.asking the user SMITH to run the catalog.sql script
D.granting SELECT privilege to SMITH on V$FIXED_TABLES
E.setting the O7_DICTIONARY_ACCESSIBILITY parameter to TRUE
F.creating a view based on V$SESSION and granting SELECT privilege to SMITH on the view that was created
答案:BF
解析:
我们先看下v$session是啥
SQL> select * from dict where table_name='V$SESSION'
TABLE_NAME COMMENTS
---------- ------------------------------
V$SESSION Synonym for V_$SESSION
SQL> select owner,object_name,object_type from dba_objects where object_name='V$SESSION'
OWNER OBJECT_NAM OBJECT_TYPE
---------- ---------- -------------------
PUBLIC V$SESSION SYNONYM
SQL> select dbms_metadata.get_ddl('SYNONYM','V$SESSION','PUBLIC') from dual;
DBMS_METADATA.GET_DDL('SYNONYM','V$SESSION','PUBLIC')
--------------------------------------------------------------------------------
CREATE OR REPLACE PUBLIC SYNONYM "V$SESSION" FOR "SYS"."V_$SESSION"
--这里我们测试一下,看是否由一个同义词的select权限而没有对应的原始对象的权限是否可以
SQL> conn scott/tiger
Connected.
SQL> select * from dept; --这里是scott用户下具有dept表
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> conn hr/hr
Connected.
SQL> select * from scott.dept; --这里hr不具有访问scott中dept的权限
select * from scott.dept
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn scott/tiger
Connected.
SQL> create public synonym sdept for scott.dept; --创建一个public的synonym
Synonym created.
SQL> select * from sdept; --创建成功
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> conn / as sysdba
Connected.
SQL> select * from sdept; --sys可以访问
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> conn hr/hr
Connected.
SQL> select * from sdept; --hr还是不行
select * from sdept
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn scott/tiger
Connected.
SQL> grant select on dept to hr;
Grant succeeded.
SQL> conn hr/hr
Connected.
SQL> select * from sdept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
我们在测试一下视图
SQL> revoke select on dept from hr;
Revoke succeeded.
SQL> create view vdept as select * from dept;
View created.
SQL> grant select on vdept to hr;
Grant succeeded.
SQL> conn hr/hr
Connected.
SQL> select * from scott.dept;
select * from scott.dept
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> select * from scott.vdept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
因此:具有视图的select,不需要对原始的对象具有select,而同义词则不可以 AC正确
通过运行catalog.sql可以创建数据字典C错误
O7_DICTIONARY_ACCESSIBILITY还需要select any table因此E错误
V$FIXED_TABLES只是一个动态性能视图,因此D错误