阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

ORA-01720:grant option does not exist for ‘%s.%s’

174次阅读
没有评论

共计 2662 个字符,预计需要花费 7 分钟才能阅读完成。

这是什么问题?

[Oracle@prod ~]$ oerr ora 01720

01720, 00000, “grant option does not exist for ‘%s.%s'”

// *Cause:  A grant was being performed on a view or a view was being replaced

//          and the grant option was not present for an underlying object.

// *Action: Obtain the grant option on all underlying objects of the view or

//          revoke existing grants on the view.

 

翻译 Cause 部分 :在对视图执行授权时,视图访问的基础对象没有指定grant option,就会出现ORA-01720 错误。

 

什么时候会出问题?

查看 Oracle 11g Release2 官方文档路径:

Oracle Database Online Documentation 11g Release 2 (11.2)->Database Administration->Security->Security Guide->4 Configuring Privilege and Role Authorization->Managing Object Privileges->”Managing View Privileges”->Privileges Required to Create Views

ORA-01720:grant option does not exist for '%s.%s'

 

翻译截图最后一段:在你授予其他用户访问视图的权限之前,必须对视图的基础对象使用 GRANT OPTION 子句或合适的系统权限并使用 ADMIN OPTION 子句。如果没有这些权限,则无法授予其他用户访问视图。如果尝试授予权限,则会引发 ORA-01720: grant option does not exist for object_name 错误,而 object_name 就是 没有足够权限访问的视图底层对象。

重现问题

1)查看 OE 用户下的表,以 OE 用户下的表为基础对象

SYS@PROD>conn oe/oe

Connected.

OE@PROD>select table_name from user_tables;

 

TABLE_NAME

——————————

PRODUCT_INFORMATION

ORDERS

WAREHOUSES

PROMOTIONS

ORDER_ITEMS

SUBCATEGORY_REF_LIST_NESTEDTAB

PRODUCT_REF_LIST_NESTEDTAB

PRODUCT_DESCRIPTIONS

INVENTORIES

CUSTOMERS

 

10 rows selected.

 

2)为 hr 用户赋予访问 oe.orders 表的权限

OE@PROD>grant select on oe.orders to hr;

 

Grant succeeded.

 

3)在 hr 用户下创建一个视图 orders,用于访问oe.orders

SYS@PROD>conn hr/hr

Connected.

HR@PROD>create view orders as select * from oe.orders;

 

View created.

 

(4)这里引入第三个用户 sh,赋予sh 用户访问视图 orders 的权限

HR@PROD>grant select on orders to sh;

grant select on orders to sh

                *

ERROR at line 1:

ORA-01720: grant option does not exist for ‘OE.ORDERS’

 

至此,问题已经重现。这里引入了 3 个用户 oehrsh,以 oe.orders 表为基表,在 hr 用户下创建视图 orders,用于查询oe.orders 表。当赋予 sh 用户访问视图 hr.orders 的时候,出现了 ORA-01720 错误。

解决问题

引用官方文档的说法:

before you can grant other users access to you view, you must have object privileges to the base objects with the GRANT OPTION clause or appropriate system privileges with the ADMIN OPTION clause

 

所以,只要对视图所在的用户赋予访问基础对象权限时,加上 GRANT OPTION 或者 ADMIN OPTION 子句,就可以解决问题。这里两个子句的区别如下:

– with admin option 只能在赋予 system privilege 的时使用

– with grant option 只能在赋予 object privilege 的时使用

 

我们这里测试的是 object privilege,所以使用with grant option 子句即可。

 

这里继续上面出现 ORA-01720 错误之后的操作:

(5)切换到 oe 用户,为 hr 用户赋予访问 oe.orders 表的权限,加上 GRANT OPTION 子句

HR@PROD>conn oe/oe

Connected.

OE@PROD>grant select on oe.orders to hr with grant option;(解决问题的关键性语句

 

Grant succeeded.

(6)切换到 hr 用户,赋予 sh 用户访问视图 orders 的权限

OE@PROD>conn hr/hr

Connected.

HR@PROD>grant select on orders to sh;

 

Grant succeeded.

 

显然,赋权限操作成功执行。

(7)切换到 sh 用户,执行一次查询操作,验证权限的可用性。

HR@PROD>conn sh/sh

Connected.

SH@PROD>select count(*) from hr.orders;

 

  COUNT(*)

———-

105

所以,一般情况下,只要在创建视图之前赋权限的语句中加上 with grant option 子句,就可以避免出现 ORA-01720 错误;如果是系统权限,在创建视图之前赋权限的语句中加上 with admin option 子句,就可以避免出现 ORA-01720 错误。

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147439.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2662字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中