2014-09-05 32 views
1
  1. 列表項最初由一個存儲過程,其確實的一些動作創建一個TEMP表
  2. 因此存在由該上面創建這些幾個TEMP表SP說。
  3. 我想給我的一些SQL用戶的爲其動態通過上述SP的

創建對於上述REQ這些TEMP表 SELECT許可,我試過以下從ROOT用戶查詢賦予權限的表前綴臨時授予特權爲TEMP表(由存儲過程動態創建的)

GRANT ALL PRIVILEGES ON dbname .`Temp%` TO 'TEST'@'%' WITH GRANT OPTION; 

但是,依然爲用戶「TEST」能不能選擇這些TEMP表上面的特權和gves以下錯誤:

SELECT命令拒絕用戶「TEST」爲表 @「localhost」的' temp_ccdata_20140904101131_2'

請人建議,如果有任何可能性授予由存儲過程創建

感謝動態表的SELECT訪問ADVANCE

+0

檢查[13.7.1.4 GRANT語法](http://dev.mysql.com/doc/refman/5.6/en/grant.html):'指定數據庫時允許使用「_」和「%」通配符在GRANT語句中授予全局或數據庫級權限的名稱。' – wchiquito 2014-09-05 08:55:30

+0

嗨,是否有任何其他可能性授予使用通配符授予SELECT動態表的權限。 – Sattanathan 2014-09-18 06:14:43

回答

0

正如@wchiquito所述,指定數據庫名稱時允許使用_% wilcards。在一個GRANT查詢的表名稱中使用通配符可能的解決方法如下:

SELECT CONCAT('GRANT SELECT ON dbname.', TABLE_NAME, ' TO user;') 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME LIKE 'prefix%'; 

更換dbnameexampledbusertony42prefixfoo_應該返回之類的查詢:

GRANT SELECT ON exampledb.foo_usertable TO tony42 

然後,您可以使用這些執行這些查詢來實現您所尋求的權限更改。它可能不是最優雅的,但會完成工作。此外,您可能想要將名稱包裝在後面的空格中以解釋空格等。

相關問題