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
相同。