只有select权限也能锁表?read and select
有个客户问我说,为啥只有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:
会话2:
可以看到,确实仅有可读的权限下,是可以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权限,用以满足客户需求。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341