温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

只有select权限也能锁表?read and select

发布时间:2020-08-07 21:29:18 来源:ITPUB博客 阅读:271 作者:随风映雪 栏目:关系型数据库

有个客户问我说,为啥只有select权限,也可以for update锁表。

我懵了一下,不确认啊,我先测试了下,如下所示:

 create user test11 identified by test11;

 create user test12 identified by test12;

grant connect,resource to test11,test12;

create table test11.objects as select * from dba_objects;

grant select on test11.objects to test12;

会话1:

只有select权限也能锁表?read and select

会话2:

只有select权限也能锁表?read and select

可以看到,确实仅有可读的权限下,是可以for update的。

为啥可以for update,似乎不符合逻辑,点太小了,只能在官方文档那个上搜了,不得不夸一句,oracle官方文档真的详细。只能想着在官方文档上看看有没有线索,一查,发现还真有!

如下:

SELECT      Query the table with the SELECT statement, including SELECT ... FOR UPDATE.

可以看到,select确实包含了 for update权限。

不一样的是,除了select之外,还有一个read表示查询,但是read不包含 for update。这个是12.1之后才有的变化。

READ Query the table with the SELECT statement. Does not allow SELECT ... FOR UPDATE.

Note: This privilege is available starting with Oracle Database 12 c Release 1 (12.1.0.2).

为啥select会有for update权限呢,可能是出于希望查询能够强制一致性的关系。

但这个其实对于大多数查询场景来说,for update的锁表权限还是太大了,所以在12.1开始,分离除了更小的read权限,用以满足客户需求。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI