2016-02-19 25 views
1

我正在努力與MySQL存儲過程,並有點沮喪。我有一組由Bob創建的SP。因爲他是DEFINER,只有他可以看到CREATE語句,修改它們等。可能有多個用戶作爲DEFINER for MySQL存儲過程?

Mary可以在MySQL Workbench的模式中看到Bob的存儲過程,但看不到他們做了什麼 - 當她點擊時SP並選擇「發送到SQL編輯器 - > CREATE語句」沒有任何反應,因爲她不是定義者。

來自MS SQL背景這對我來說有點奇怪。有沒有什麼辦法可以建立一個組(例如「DB_DEVS」),並使這個組成爲存儲過程的定義者,這樣Bob和Mary就可以看到彼此的代碼?

回答

3

DEFINER總是指創建存儲過程的用戶。這隻能是1個用戶。

如果瑪麗希望看到鮑勃過程中,她可以打電話:

SHOW CREATE PROCEDURE proc_name 

要查看程序的代碼。她還可以撥打下列看到代碼:

SELECT ROUTINE_DEFINITION FROM information_schema.ROUTINES WHERE SPECIFIC_NAME='proc_name' 

繼承人如何啓用瑪麗通過的MySQL工作臺來訪問程序的視圖:

默認情況下,瑪麗是無法發送SQL編輯器的創建語句。但這只是一件特權事情。 Mary只需要mysql.proc表中的基本SELECT權限。要做到這一點,運行下面的SQL語句(通過工作臺命令行或直接):

GRANT SELECT ON mysql.proc TO 'mary'@'%' 

此命令使瑪麗從所有主機訪問創建結單。如果你想將其限制在一個特定的主機,你會做這樣的事情:

GRANT SELECT ON mysql.proc TO 'mary'@'192.168.2.1' 

如果瑪麗的SELECT權限,她應該能看到做Send to SQL Editor -> CREATE statement

注後的程序:爲了運行GRANT -Command您需要登錄爲用戶誰擁有的權限授予的權限(如根用戶)

++++++++++++++++++編輯++++++++++++++++++++++

對於大量用戶來說,有一種「快速和骯髒」的方式,無需爲每個用戶編寫一個授予特權的新命令: (請務必與具有權限的用戶插入通過工作臺行)

  1. 打開一個新的SQL-Tab鍵在工作臺
  2. SELECT * FROM mysql.tables_priv;類型和運行它
  3. 上述結果,電網應該有一個小按鈕,它允許你從csv-File導入數據。
  4. 創建的CSV文件看起來像這樣:

    %,MySQL和簡,PROC,根@本地, 「2016年2月19日22時51分47秒」,選擇, %,mysql的, max,proc,root @ localhost,「2016-02-19 22:51:47」,選擇, %,mysql,steve,proc,root @ localhost,「2016-02-19 22:51:47」,Select , %,mysql,greg,proc,root @ localhost,「2016-02-19 22:51:47」,選擇, %,mysql,jamie,proc,root @ localhost,「2016-02-19 22: 51:47" ,選擇,

    ...進一步的用戶

簡,馬克斯,史蒂夫,...將是你的用戶。保持其他列的方式。

  • 您的CSV,文件
  • 運行FLUSH PRIVILEGES在SQL-窗口(reloades權限從私法桌)
  • 完成!您的所有用戶現在都可以訪問存儲過程
  • +0

    這很好 - 它在MySQL Workbench的設計中似乎有些不正常,提供了選項但不能使其工作。它似乎需要一些必須去爲每個用戶添加此權限(作爲我的情況下的root)!非常感謝您的幫助。 –

    +0

    @MrAngry:好吧,如果你有大量的用戶,並且懶得給每個用戶輸入這個命令,那麼就有一種「快速和骯髒」的方式來實現這一點。看到我的編輯... –

    +0

    謝謝內特 - 我有一小部分用戶,所以現在可能會手動做,雖然額外的信息也是有用的知道。我只是感到驚訝,沒有一種更強有力的或者「官方」的方式來做一些看起來(對我來說)是一個相當標準的要求。 –