通常我通过phpMyAdmin管理我的数据库上的用户,但由于我在SQLyog或HeidiSQL等独立程序中执行其他所有操作,因此我希望能够从这些程序远程管理用户.
>远程用户已经拥有SUPER,因为在将视图从本地数据库复制到远程数据库时需要它. >远程用户没有mysql和目标数据库所需的数据库级权限,因为SUPER没有给出.
我试过这个(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"
返回一个空集.结果,在该阶段,我的远程用户无法向用户授予权限(错误1442).
但是,
SHOW GRANTS FOR 'UserName'@'myIP'
确实表明了
GRANT ALL PRIVILEGES ON *.* TO ‘UserName’@’myIP’ IDENTIFIED BY
PASSWORD ‘someHash’ WITH GRANT OPTION
为了解决这个问题,我不得不专门在mysql和somedatabase上进行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;
有人会有关于为什么*.*不够的见解? 解决方法: 我真的不得不考虑这一个.错误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.
如果您使用的是托管主机,则有些人会使用触发器和存储过程来故意阻止运行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.
什么补助是不允许的?
> SUPER > FILE > SHUTDOWN(见我的帖子what could cause a mysql process to close (clean)) > REPLICATION SLAVE > REPLICATION CLIENT >见MySQL Documentation on all the GRANTS
如果您看到错误1442,那么您的托管公司必须使用一些编写为存储过程的代理代码,或者已创建针对mysql架构的触发器以在总线下抛出常规GRANT命令.从商业角度来看,他们是这样做的.
如果亚马逊RDS允许所有拨款,你能想象造成的破坏吗?
>如果你有SHUTDOWN,你可以在没有亚马逊API的情况下关闭MySQL RDS实例 >如果您有REPLICATION SLAVE和REPLICATION CLIENT,则可以在Amazon外部设置Slaves(定义了正确的安全组). >如果有SUPER,您可以终止连接,软管二进制日志,增加连接限制等. >如果您有FILE,则可以在MySQL RDS实例内部使用SELECT … INTO OUTFILE创建文件,从外部源创建LOAD DATA … INFILE(同样,定义了正确的安全组).
因此,您需要阅读托管公司的文档,了解它们对MySQL授权的限制.如果亚马逊用RDS做到这一点,我相信其他公司会有相同的协议.对于Amazon RDS用户来说,解决此问题的方法是放弃Amazon RDS并切换到Amazon EC2.
联系您的托管公司,看看是否确实如此. 来源:https://www./content-2-379001.html
|