Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Oracle:在视图上授予select权限_Database_Oracle - Fatal编程技术网

Database Oracle:在视图上授予select权限

Database Oracle:在视图上授予select权限,database,oracle,Database,Oracle,我正在尝试对包含以下几个表的视图执行选择操作 SELECT count(1) FROM ABC_DEF.MY_VIEW; 观点: SELECT TEXT FROM DBA_VIEWS where OWNER = 'ABC_DEF' and VIEW_NAME = 'MY_VIEW' ; Result : SELECT "COL_1", "COL_2" FROM (SELECT DISTINCT A.COL_1, B.COL_2 FROM ABC.TABLE_1 A, XYZ.TABLE_2

我正在尝试对包含以下几个表的视图执行选择操作

SELECT count(1) FROM ABC_DEF.MY_VIEW;
观点:

SELECT TEXT FROM DBA_VIEWS where OWNER = 'ABC_DEF' and VIEW_NAME  = 'MY_VIEW' ;

Result : SELECT "COL_1", "COL_2" FROM (SELECT DISTINCT A.COL_1, B.COL_2 FROM ABC.TABLE_1 A, XYZ.TABLE_2 B WHERE A.COL_3 = B.COL_3)
为了做到这一点,我尝试授予我使用的角色select访问权限

GRANT SELECT ON ABC_DEF.MY_VIEW TO MY_READ_ROLE;
ERROR at line 1:
ORA-01720: grant option does not exist for 'XYZ.TABLE_2'
然后我尝试将select授予表本身

GRANT SELECT ON XYZ.TABLE_2 TO MY_READ_ROLE;

Grant succeeded.

然后我尝试再次对视图执行授权,但仍然会得到相同的错误。有人能帮我吗?

您的视图使用DBA\U视图。您有从DBA_视图进行选择的权限,但没有向其他用户授予选择的权限

这就是两者之间的区别:

Grant select on some_table to_some_user

Grant在某个表上选择某个用户并使用Grant选项

在后一种情况下,某些_用户现在可以将某些_表上的select授予其他用户


也许您可以使用所有视图而不是DBA视图来完成您想要的任务。

当您收到权限(例如,
在ABC\u DEF.MY\u视图上选择)
时,您无法将您的权限“转发”给其他人


为此,您需要使用带有授予选项的权限
,然后您可以将权限转发给其他人。

在我的场景中,用户\u X尝试向我的\u用户授予权限。他们还可以为表格授予select。但当他们试图将视图上的select授予MY_用户时,出现了错误。那么,第三个用户是否应该向用户\u X授予select with grant选项,以便他们可以向我的\u用户授予访问权限?这似乎有点复杂,但也许我没有理解答案。如果您能提供更多帮助,我们将不胜感激。是的,还有第三位用户参与其中。DBA_视图的所有者,即SYS。因此,您的用户_X以某种方式选择了在DBA_视图上授予,但没有选择授予选项。尝试将您的视图建立在所有视图的基础上。好的,所以第三个用户需要将select with grant选项(在表或视图中??)授予用户_X,然后用户将select授予我的用户。是的,但您不希望在dba_视图上这样做。使用所有视图。如果我在这一点上听起来很愚蠢,很抱歉,但是我不理解关于使用所有视图而不是dba视图的部分。我没有在任何补助金中使用它。我使用dba_视图的唯一地方是查看我的_视图的定义。当我使用
all_views
获取视图定义时,得到的结果与
dba_views
相同。