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

时间:2011-03-10 01:49:42

标签: 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>

我认为奇怪的是,在致电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)

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

提前感谢您提供任何建议。

4 个答案:

答案 0 :(得分:15)

对于未来的搜索者,我发现在使用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...

应更改为:

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

CONSTRAINT `fk_user_id`
    FOREIGN KEY (`user_id` )
    REFERENCES `table1` (`id` )
...blah blah blah...

答案 1 :(得分:14)

我想建议如下:

下次登录时运行此查询:

SELECT USER(),CURRENT_USER();

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

您可以在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中的列可能不同步。

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:0)

当使用MySQL Workbench Migration Wizard将数据库从一台服务器复制到另一台服务器时,我收到了相同的错误消息,因为新的数据库名称与原始数据库名称不匹配。新服务器自动将其域名放在所有数据库名称的前面,从而导致名称不匹配。因此,在将数据库xyz传输到新服务器domain时,它会调用新数据库domain_xyz,并且每次创建表时都会出现上述错误消息。

要解决此问题,我在生成迁移架构后手动编辑了新的数据库名称,并将其从xyz更改为doman_xyz

对Camwyn的回应提示,让我朝这个方向看。