Permissions

相同的查詢,不同的結果(取決於使用者的權限)

  • November 15, 2019

一般關於SQL的問題:

如果兩個使用者執行相同的 sql 語句,是否可能 user1 與 user2 得到不同的結果?

想像一下 user1 比 user2 擁有更多的權限。

換句話說:user1 是否有可能收到 100 行,而 user2 只有 80?

我的問題是關於 SQL 標準的。

但是請隨意在評論中談論特定數據庫系統的實現。

如果兩個使用者執行相同的 sql 語句,是否可能 user1 與 user2 得到不同的結果?

是的,一點沒錯。

行級訪問控制允許數據庫管理員在表上放置“上下文”過濾器,以便不同的使用者確實看到不同的數據。

例如,使用者表可能受到保護,這樣人事部門的使用者可以看到所有人,但任何其他部門的任何人都只能看到同一部門的人。

SQL 標準沒有也不能規定從 SQL 數據庫返回或更新哪些數據;它是關於語言的語法和語義規則。一個合規的 DBMS 可以向同一個使用者返回不同的結果以響應同一個查詢,並且仍然保持合規。事實上,這種情況一直在發生——參見事務隔離級別。

相反(對不同查詢的響應結果相同)也是正確的——BLACKHOLE 儲存引擎不會使 MySQL 不符合標準(雖然不多,但仍然如此)。

換句話說,你的問題:

是否有可能 user1 收到 100 行,而 user2 只有 80?

完全超出了 SQL 標準的範圍,並且受制於單獨的 RDBMS 實現,正如其他人所提到的,這些實現可能具有允許這樣做的特定機制。

引用自:https://dba.stackexchange.com/questions/253376