Mariadb

MariaDB“EXECUTE AS”或使用者模擬

  • November 23, 2021

使用 MariaDB,有沒有辦法在與更高特權帳戶連接時模擬使用者執行上下文?

例如,當與“MasterUser”連接時,使用“ClientUser”的更有限的權限執行 SELECT。

經典的想法是避免伺服器應用程序執行與 MariaDB 的數千個連接——如果大多數請求可以通過“代理”使用者處理,該使用者將連接一次並在每個給定事務的適當權限級別下操作。

謝謝!

避免與數據庫建立數千個連接確實是合適的,但是解決這個特定問題的方法是連接池,而不是模擬代理。通過使用單個連接代理代表其他客戶端執行操作,您嚴重限制了並發性,因為 MySQL (MariaDB) 和大多數其他 DBMS 中的一個連接(會話)由單個執行緒提供服務。因此,當使用單個代理時,所有客戶端的請求都必須串列執行。

在某些情況下,您確實希望在連接中使用模擬(同時仍具有多個並發連接),例如,當應用程序業務邏輯的不同部分必須使用不同的安全上下文訪問數據庫時*,*可以使用數據庫角​​色來實現,如在另一個答案中解釋。

實現模擬的另一種方法是使用在其定義者上下文中執行的常式(儲存過程和函式)。考慮

CREATE DEFINER = some_role PROCEDURE sp_name
...
SQL SECURITY DEFINER
BEGIN
 -- do something
END

上面的過程將使用some_role授權在其中執行 SQL 語句,而不管是什麼使用者呼叫它。您仍然需要定義適當的角色,但不需要依賴會話中正確的角色選擇來強制執行角色的權限。

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