2010-06-01 85 views
35

我想有多個一個MySQL用戶能夠發出像讓MySQL用戶創建數據庫,但是隻允許訪問自己的數據庫

CREATE DATABASE dbTest; 

命令,但我也希望每個用戶來只能看到並訪問他們的自己的數據庫。

所有我能找到的是如何可以創建一個由DBA數據庫,並授予該數據庫的權限給特定用戶:對所有數據庫

GRANT ALL PRIVILEGES ON dbTest.* TO 'user'; 

或授予權限的用戶:

GRANT ALL PRIVILEGES ON *.* TO 'user'; 

但既不是我想要的,因爲它需要擴展和安全。

回答

65

您可以使用

GRANT ALL PRIVILEGES ON `testuser\_%` . * TO 'testuser'@'%'; 

授予用戶對所有數據庫testuser特權與testuser_開頭的名稱。

這允許TESTUSER創建開始testuser_

+0

當我運行這個時,我得到錯誤1064 ...在第1行'* TO'testuser'@'%''附近使用正確的語法 – Asaf 2015-08-29 18:34:37

+0

您可以發佈整個查詢嗎? – 2015-08-29 20:10:00

+0

我注意到這隻發生在'mysql -u root -e「QUERY」'下運行時,如果你用反斜槓反斜槓 – Asaf 2015-08-30 13:47:17

12

不限於姓名數據庫創建由管理員用戶定義,並通過使用SQL SECURITY DEFINER與管理員用戶權限調用的存儲過程。在存儲過程中,

  • 創建數據庫。
  • 設置數據庫的權限,以便只有當前用戶有權訪問。
  • 執行FLUSH PRIVILEGES以從授權表中重新加載權限。

使用USER()獲取當前用戶登錄詳細信息。

Find out more about SQL SECURITY DEFINER

+1

它在哪裏創建存儲過程。哪個數據庫具有此存儲過程? – Nest 2015-03-02 09:38:31

19

您可以使用

GRANT ALL PRIVILEGES ON `testuser_%` . * TO 'testuser'@'%'; 

授予用戶對所有數據庫testuser特權與testuser_開頭的名稱。

編輯:我不確定此用戶現在是否也被允許創建數據庫。

是的,這使得testuser創建不限於姓名數據庫開始testuser_

+2

我不得不圍繞testuser_%包裝反引號,但不幸的是,堆棧溢出不會通過反引號表示代碼段。 – Programster 2014-04-09 09:10:08

+8

這應該是對Lex答案的評論,而不是答案本身。 – 2014-12-04 00:27:16

+0

我不確定這個用戶現在是否也被允許創建數據庫....不,它不是。 – sitilge 2015-08-24 13:29:30

0

這是不可能做到這一點使用權限只有

在另一個答案建議解決方法: GRANT ALL PRIVILEGES ON testuser_%. * TO 'testuser'@'%'; 存在的問題是用戶必須然後在命名他們的數據庫非常小心。

例如,如果用戶aaa創建數據庫bbb_xyz,然後它可以完全由用戶bbb而不是由用戶aaa訪問。

相關問題