您好,登錄后才能下訂單哦!
有個客戶問我說,為啥只有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權限,用以滿足客戶需求。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。