对具有GRANT ALL PRIVILEGES的用户拒绝CREATE命令

Bra*_*rad 10 mysql mysql-error-1142

我正在尝试建立一个MySQL复制从站,并且运行起来非常困难LOAD DATA FROM MASTER;.是的,我知道它已被弃用,但我正在运行MySQL 5.1,这不是我目前的问题.

出于某种原因,MySQL一直告诉我CREATE命令被拒绝,但是对SHOW GRANTS的检查则另有说法.看一下这个:

mysql> SHOW GRANTS;
+--------------------------------------------------------------------------------------------------------------------+
| Grants for replicator@%                                                                                            |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'replicator'@'%' IDENTIFIED BY PASSWORD '*ABCDEFABCDEFABCDEFABCDEFBLAHBLAHBLAHBLAH' |
+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> LOAD DATA FROM MASTER;
ERROR 1142 (42000): CREATE command denied to user 'replicator'@'localhost' for table 'aggregate'
mysql>
Run Code Online (Sandbox Code Playgroud)

我觉得奇怪的是,在打电话时LOAD DATA FROM MASTER,它认为我是'replicator'@'localhost',但是SHOW GRANTS'replicator'@'%'.为了安全起见,我也给了同样的权利'replicator'@'localhost'.

mysql> SHOW GRANTS FOR 'replicator'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------+
| Grants for replicator@localhost                                                                                            |
+----------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'replicator'@'localhost' IDENTIFIED BY PASSWORD '*ABCDEFABCDEFABCDEFABCDEFBLAHBLAHBLAHBLAH' |
+----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

那么,为什么这一切都搞砸了?是的,我也做了FLUSH PRIVILEGES很多次.

提前感谢您提出的任何建议.

小智 16

对于未来的搜索者,我发现在使用MySQL Workbench和phpMyAdmin的组合时我得到了这个错误:如果你从表列表中复制SQL,它会将模式名称添加到create语句中的表名(并且在可能属于它的外键命令).

小心删除模式名称为我解决了这个问题.

例如:

CREATE  TABLE IF NOT EXISTS `schema`.`table1` (
...blah blah blah...

CONSTRAINT `fk_user_id`
    FOREIGN KEY (`user_id` )
    REFERENCES `schema`.`table1` (`id` )
...blah blah blah...
Run Code Online (Sandbox Code Playgroud)

应改为:

CREATE  TABLE IF NOT EXISTS `table1` (
...blah blah blah...

CONSTRAINT `fk_user_id`
    FOREIGN KEY (`user_id` )
    REFERENCES `table1` (`id` )
...blah blah blah...
Run Code Online (Sandbox Code Playgroud)


Rol*_*DBA 14

我想建议如下:

当您下次登录时运行此查询:

SELECT USER(),CURRENT_USER();
Run Code Online (Sandbox Code Playgroud)

如果您看到两个不同的用户名,则会出现奇怪的情况

您可以在MySQL 5.0认证学习指南(ISBN 0-672-32812-7),第34章或第35章中找到它

USER() 回应您尝试登录的内容

CURRENT_USER() 回声什么mysql允许你登录为.

尝试使用127.0.0.1作为复制器进行连接并运行相同的查询.

您可能还想确保mysql.user中存在所有必需的列,以用于您正在使用的mysql版本.如果你没有升级mysql.user表(从MySQL 4的迁移 - MySQL 5,或MySQL 5.0到5.1),mysql.user中的列可能不同步.


Bra*_*rad 5

奇怪的是,只需退出客户端并重新连接即可解决问题!显然,FLUSH PRIVILEGES还不够.

如果您了解其中的原因,我想听听您的意见.我一直听说FLUSH PRIVILEGES会这样做.它可能与我最初登录'replicator'@'%'然后创建'replicator'@'localhost'帐户有关吗?

在任何情况下,如果你有像这样的奇怪的权限问题,我想值得尝试重新连接客户端.