打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
mysql – 由GRANT ALL PRIVILEGES混淆*.*(…)WITH GRANT OPTION

通常我通过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.dbWHERE 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 SLAVEREPLICATION CLIENT,则可以在Amazon外部设置Slaves(定义了正确的安全组).
>如果有SUPER,您可以终止连接,软管二进制日志,增加连接限制等.
>如果您有FILE,则可以在MySQL RDS实例内部使用SELECT … INTO OUTFILE创建文件,从外部源创建LOAD DATA … INFILE(同样,定义了正确的安全组).

因此,您需要阅读托管公司的文档,了解它们对MySQL授权的限制.如果亚马逊用RDS做到这一点,我相信其他公司会有相同的协议.对于Amazon RDS用户来说,解决此问题的方法是放弃Amazon RDS并切换到Amazon EC2.

联系您的托管公司,看看是否确实如此.

来源:https://www.icode9.com/content-2-379001.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
解决MySQL无法远程连接的方法
MYSQL添加远程用户
mysql-记录一次CentOS7压缩包安装mysql的过程
mysql 远程客户端连接不上
mysql连接是显示error number 1130 ,解决办法
解决mysql远程无法链接问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服