通常我通過phpMyAdmin管理我的數(shù)據(jù)庫上的用戶,但由于我在SQLyog或HeidiSQL等獨(dú)立程序中執(zhí)行其他所有操作,因此我希望能夠從這些程序遠(yuǎn)程管理用戶.
>遠(yuǎn)程用戶已經(jīng)擁有SUPER,因?yàn)樵趯⒁晥D從本地數(shù)據(jù)庫復(fù)制到遠(yuǎn)程數(shù)據(jù)庫時需要它. >遠(yuǎn)程用戶沒有mysql和目標(biāo)數(shù)據(jù)庫所需的數(shù)據(jù)庫級權(quán)限,因?yàn)镾UPER沒有給出.
我試過這個(MySQL版本5.6.23):
GRANT ALL PRIVILEGES ON *.* TO 'UserName'@'myIP' IDENTIFIED BY 'password'
WITH GRANT OPTION
奇怪的是,*.*似乎不起作用.例如:
SELECT USER, HOST, db, select_priv, insert_priv, grant_priv FROM mysql.db
WHERE db="somedatabase"
返回一個空集.結(jié)果,在該階段,我的遠(yuǎn)程用戶無法向用戶授予權(quán)限(錯誤1442).
但是,
SHOW GRANTS FOR 'UserName'@'myIP'
確實(shí)表明了
GRANT ALL PRIVILEGES ON *.* TO ‘UserName’@’myIP’ IDENTIFIED BY
PASSWORD ‘someHash’ WITH GRANT OPTION
為了解決這個問題,我不得不專門在mysql和somedatabase上進(jìn)行GRANT ALL:
GRANT ALL PRIVILEGES ON mysql.* TO 'UserName'@'myIP' IDENTIFIED BY 'password'
WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON somedatabase.* TO 'UserName'@'myIP' IDENTIFIED BY 'password'
WITH GRANT OPTION;
有人會有關(guān)于為什么*.*不夠的見解? 解決方法: 我真的不得不考慮這一個.錯誤1442影響GRANT命令?
注意MySQL Documentation
Error: 1442 SQLSTATE: HY000 (ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG)
Message: Can’t update table ‘%s’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
如果您使用的是托管主機(jī),則有些人會使用觸發(fā)器和存儲過程來故意阻止運(yùn)行GRANT命令.
例子:Amazon RDS allows the following:
Q: What privileges are granted to the master user for my DB Instance?
For MySQL, the default privileges for the master user include: create, drop, references, event, alter, delete, index, insert, select, update, create temporary tables, lock tables, trigger, create view, show view, alter routine, create routine, execute, trigger, create user, process, show databases, grant option.
什么補(bǔ)助是不允許的?
> SUPER > FILE > SHUTDOWN(見我的帖子what could cause a mysql process to close (clean)) > REPLICATION SLAVE > REPLICATION CLIENT >見MySQL Documentation on all the GRANTS
如果您看到錯誤1442,那么您的托管公司必須使用一些編寫為存儲過程的代理代碼,或者已創(chuàng)建針對mysql架構(gòu)的觸發(fā)器以在總線下拋出常規(guī)GRANT命令.從商業(yè)角度來看,他們是這樣做的.
如果亞馬遜RDS允許所有撥款,你能想象造成的破壞嗎?
>如果你有SHUTDOWN,你可以在沒有亞馬遜API的情況下關(guān)閉MySQL RDS實(shí)例 >如果您有REPLICATION SLAVE和REPLICATION CLIENT,則可以在Amazon外部設(shè)置Slaves(定義了正確的安全組). >如果有SUPER,您可以終止連接,軟管二進(jìn)制日志,增加連接限制等. >如果您有FILE,則可以在MySQL RDS實(shí)例內(nèi)部使用SELECT … INTO OUTFILE創(chuàng)建文件,從外部源創(chuàng)建LOAD DATA … INFILE(同樣,定義了正確的安全組).
因此,您需要閱讀托管公司的文檔,了解它們對MySQL授權(quán)的限制.如果亞馬遜用RDS做到這一點(diǎn),我相信其他公司會有相同的協(xié)議.對于Amazon RDS用戶來說,解決此問題的方法是放棄Amazon RDS并切換到Amazon EC2.
聯(lián)系您的托管公司,看看是否確實(shí)如此. 來源:https://www./content-2-379001.html
|