2011-05-04 31 views
12

我使用表格前綴方法讓多個客戶端使用同一個數據庫。每個客戶創建的表的數量將是〜55。不是通過手動列出表格來完成所有授予,我可以執行類似以下的操作嗎?使用特定前綴對多個表格授予特權

GRANT SELECT,INSERT,UPDATE,DELETE ON database.prefix_* TO 'username'@'localhost' IDENTIFIED BY 'password'; 
+1

這很奇怪。 [這裏](http://stackoverflow.com/a/5989300/344347)與正面答案是相同的問題。 – 2012-05-23 21:40:29

+1

@PavelStrakhov我知道你的評論有點老了,但是這個問題是關於表通配符(這不是MySQL支持的),而你的鏈接問題是關於數據庫通配符(它支持) – leemes 2014-07-25 12:37:16

回答

26

高級注意:這不是我的答案。我發現它在http://lists.mysql.com/mysql/202610,爲簡單起見覆制並粘貼到Stephen Cook

您可以使用INFORMATION_SCHEMA.TABLES視圖爲您生成GRANT 語句。編寫一個查詢,沿着這些線路:

SELECT CONCAT('GRANT SELECT ON test.', TABLE_NAME, ' to ''foouser'';') 
FROM  INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'test' 
     AND TABLE_NAME LIKE 'foo_%' 

然後運行它,複製的結果,並運行這些結果作爲查詢或 腳本。當然,你可以像這樣瘋狂得多,對於 的例子,如果你爲許多用戶這麼做的話,可以編寫一個存儲過程 ,該存儲過程需要一個用戶名參數,因此可以在需要時用作 工具。

這不是你要求的語法,但它是一個很好的技巧。

-

用你的數據庫名稱替換表模式「測試」。 foo_%可以用appropraite前綴替換_%

我試過了我自己,它工作得很好。

+4

OP沒有禮貌接受這個回答,但它對我很有幫助+1 – user470714 2011-06-10 19:14:49

+0

您爲我節省了一天,先生! – jestro 2012-01-09 13:31:58

+0

awsome解決方案,如果您需要在許多(前綴)表上添加特定權限。 – 2012-10-03 10:45:01

3

我不確定你是否可以通配表名,但你絕對可以通配數據庫名。注意,因爲_是匹配任何單個字符的通配符(如正則表達式中的.)。

的機制的文檔是在這裏:http://dev.mysql.com/doc/refman/5.5/en/grant.html

的「_」和「%」通配符是,在全球或數據庫 級別授予 特權GRANT語句中指定數據庫 名時允許 。這意味着,例如,如果您想要使用數據庫名稱的「_」字符作爲 部分,則應將其指定爲GRANT 語句中的「\ _」,以防止用戶從 能夠以訪問匹配通配符 模式的附加 數據庫;例如,GRANT ... ON`FOO \ _bar` * TO ....

+0

看起來好像我們不能爲表名使用通配符 – 2017-01-17 07:35:10

0

使用bash:

mysql -Ne "show tables from test like 'foo_%'" | xargs -I {} mysql -Ne "GRANT SELECT ON test.{} TO 'foouser'@'%'" 
1

以下

GRANT SELECT , INSERT , UPDATE , DELETE ON ``database.prefix\_%``. * TO 'username'@'localhost'

工作正常(在Windows上使用MySQL 5.6.12進行測試)

相關問題