ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-08-06 10:17:16  阅读:367  来源: 互联网

标签:mysql permissions remote


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

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

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

标签:mysql,permissions,remote
来源: https://codeday.me/bug/20190806/1598300.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有