Mysql

如果數據庫 a 包含插入到數據庫 b (同一台機器)表中的儲存過程,我需要什麼權限?

  • December 15, 2016

我有一個儲存過程,database a其中包含動態 sql 來執行插入到database b. 執行使用者需要什麼權限database b

這完全取決於儲存過程是如何創建的

在表(儲存過程的物理首頁)中,有一個名為定義為mysql.proc的 ENUM 列。security_type``enum('INVOKER','DEFINER')

如果儲存過程被定義為DEFINER並且呼叫使用者具有EXECUTE 權限,則所有授權都被代理並且呼叫使用者可以執行儲存過程中的所有內容。不過,您將能夠執行它。

如果儲存過程定義為INVOKER,則呼叫使用者需要獲得所有必要的授權,然後呼叫使用者才能執行儲存過程中的所有內容。

如果您在數據庫 A 中CALL B.MyProc()以 myuser@’%’ 身份執行,則myuser@'%'需要具有EXECUTE 權限才能呼叫儲存過程。

在您的情況下,如果您在CALL MyProc()以 myuser@’%’ 身份執行的數據庫 A 中,則 myuser@’%’ 需要定義數據庫 B 的數據庫級授權。建議:將儲存過程移至數據庫 B,授予使用者EXECUTE 權限並執行 running CALL B.MyProc()

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