暂无图片
暂无图片
9
暂无图片
暂无图片
暂无图片

Oracle权限管理-WITH GRANT OPTION

1、 背景描述

     昨天用户在给一个视图授权的时候出现报错“ORA-01720:不存在的授权选项”,根据报错提示,这是一个权限的问题,通过在授权时增加with grant option解决。

2、问题重新

2.1、准备三个用户

(1)HR :存在JOBS表
(2)SCOTT :创建视图 hr_jobs,并授予 select 权限给 shen
(3)SHEN :无需任何操作

2.2、实验操作

    HR用户操作:HR用户将JOBS表的SELECT权限授权给SCOTT用户

SQL> conn hr/hr

Connected.

SQL> grant select on hr.jobs to scott;

    SCOTT用户操作:SCOTT用户将HR用户的表JOBS创建名为HR_HOBS的视图,并授权给SHEN用户,此时报错ORA-01720。

SQL> conn scott/tiger

Connected.

SQL> create or replace view hr_jobs as select t.job_id,t.job_title from hr.jobs t;

SQL> grant select on hr_jobs to shen;

grant select on hr_jobs to shen

*

ERROR at line 1:

ORA-01720: grant option does not exist for ‘HR.JOBS’

3、解决方法

SQL> conn hr/hr

Connected.

SQL> grant select on hr.jobs to scott with grant option;

Grant succeeded.

SQL> conn scott/tiger

Connected.

SQL> grant select on hr_jobs to shen;

Grant succeeded.

4、原因分析

      举个例子,我有一台笔记本电脑,我授权给张三使用(SELECT权限),张三却想把我笔记本电脑卖掉(明显行不通,需要笔记本电脑的主人授权才行)。即我拥有该对象的"SELECT"权限,但我没有 ‘支配’ 该对象的权限(with grant option)

5、附上多个对象授权脚本

select (case

when t.type = ‘VIEW’ then

'GRANT SELECT ON ’ || t.owner || ‘.’ ||

t.referenced_name || ’ WITH GRANT SELECT;’

else

'GRANT EXECUTE ON ’ || t.owner || ‘.’ ||

t.name || ’ WITH GRANT SELECT;’

end)

from all_dependencies t

where t.owner = ‘SCOTT’

and t.name = ‘HR_JOBS’

and t.type in (‘VIEW’, ‘PROCEDURE’, ‘FUNCTION’, ‘PACKAGE BODY’);

最后修改时间:2021-12-08 16:09:11
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论