mysql – 由GRANT ALL PRIVILEGES混淆*.*(…)WITH GRANT OPTION
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 由GRANT ALL PRIVILEGES混淆*.*(…)WITH GRANT OPTION,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2805字,纯文字阅读大概需要5分钟。
内容图文
![mysql – 由GRANT ALL PRIVILEGES混淆*.*(…)WITH GRANT OPTION](/upload/InfoBanner/zyjiaocheng/896/fe4d78a497fe41808766b3b4db1be326.jpg)
通常我通过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命令?
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.
联系您的托管公司,看看是否确实如此.
内容总结
以上是互联网集市为您收集整理的mysql – 由GRANT ALL PRIVILEGES混淆*.*(…)WITH GRANT OPTION全部内容,希望文章能够帮你解决mysql – 由GRANT ALL PRIVILEGES混淆*.*(…)WITH GRANT OPTION所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。