2010-10-22 24 views
2

創建函數當連接到我的服務器(從不同的機器),我得到MySQL的權限 - 甚至不能用「創建日常」格蘭特

Error Code: 1044 Access denied for user 'username'@'%' to database 'dbname' 

當我嘗試創建一個函數。但是,當我看到我的權限

SHOW GRANTS FOR CURRENT_USER; 

我得到

'GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE ROUTINE ON *.* TO ''username''@''%'' IDENTIFIED BY PASSWORD ''--stripped--'' WITH GRANT OPTION' 

特別是,這包括創建程序。爲什麼我不能做一個功能?我怎樣才能改變它,所以我可以?

回答

4

我認爲有一個CREATE FUNCTIONCREATE ROUTINE分開。但無論哪種方式,因爲它看起來像你的用戶有100%的完全訪問反正你可以這樣做:

GRANT ALL PRIVILEGES ON *.* TO [email protected]'%' INDENTIFIED BY 'password' WITH GRANT OPTION 

但是我想指出這將是更好的設置「%」到「localhost」的,只有訪問數據庫以這種方式從本地機器(或至少一個可信的IP)發送。缺乏安全性可能會造成麻煩。

絕對不要使用此用戶/密碼從Web腳本連接到數據庫!

編輯 我忘了:程序和功能都被授予全球。添加嘗試將授予添加到表本身,這是它不起作用的原因。嘗試:

GRANT ALTER ROUTINE,CREATE ROUTINE, EXECUTE ON * TO [email protected]'%' IDENTIFIED BY 'password' 

還有這裏是它的一個較長的描述:當我試圖授予CREATE FUNCTION http://dev.mysql.com/doc/refman/5.0/en/grant.html

+0

的MySQL提供了一個錯誤。我給了所有權限,現在當前用戶授予(根據SHOW GRANTS FOR CURRENT_USER)是'授予所有權限*。*到'username'@'%'IDENTIFIED BY PASSWORD'--deleted--'WITH GRANT OPTION',但我仍然無法創建函數(相同的錯誤)。 – Charles 2010-10-22 15:19:56

+0

至於安全性:我沒有使用本地主機的腳本(請參閱我的第一行),但您的限制建議似乎很好;也許我會限制它到我的IP地址和本地主機。我當然不是從網頁腳本中使用它! – Charles 2010-10-22 15:23:12

+0

看我的編輯。我認爲這樣可以解決你的問題 – Cfreak 2010-10-22 15:36:41