Команда CREATE запрещена для пользователя, имеющего GRANT ALL PRIVILEGES

Я пытаюсь настроить подчиненное устройство репликации 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 ответа

Решение

Я хотел бы предложить следующее:

При следующем входе в систему выполните этот запрос:

SELECT USER(),CURRENT_USER();

Если вы видите два разных имени пользователя, у вас есть странный сценарий

Это вы можете найти в учебном руководстве по сертификации MySQL 5.0 (ISBN 0-672-32812-7), глава 34 или 35

USER() повторяет то, что вы пытались войти как

CURRENT_USER() echos what mysql позволил вам войти как.

Попробуйте подключиться, используя репликатор, используя 127.0.0.1, и выполните тот же запрос.

Вы также можете убедиться, что в mysql.user присутствуют все необходимые столбцы для версии mysql, которую вы используете. Если вы не обновили таблицу mysql.user (с перехода с MySQL 4 - MySQL 5 или MySQL 5.0 на 5.1), столбцы в mysql.user могут быть не синхронизированы.

Для будущих поисковиков я обнаружил, что получаю эту ошибку при использовании комбинации 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...

Как ни странно, просто ВЫЙТИ из клиента и восстановив соединение, решите проблему! Очевидно, FLUSH PRIVILEGES недостаточно.

Я хотел бы услышать любые комментарии, если у вас есть их, почему это так. Я всегда слышал, что FLUSH PRIVILEGES сделаю именно это. Может ли это иметь какое-то отношение ко мне, первоначально входя в систему как 'replicator'@'%' а затем, создавая 'replicator'@'localhost' учетная запись?

В любом случае, если у вас есть странные проблемы с разрешениями, подобные этой, я думаю, стоит попытаться повторно подключить клиент.

При использовании MySQL Workbench Migration Wizard для копирования БД с одного сервера на другой мне было выдано то же сообщение об ошибке, поскольку новое имя БД не совпадало с исходным. Новый сервер автоматически размещает свое доменное имя перед всеми именами БД, создавая несоответствие в именах. Поэтому при переносе БД xyz на новый сервер domainэто называется новая БД domain_xyz и вышеупомянутое сообщение об ошибке происходило для каждого создания таблицы.

Чтобы решить эту проблему, я вручную отредактировал новое имя БД после создания схемы миграции, изменив его с xyz в doman_xyz,

Подсказка к ответу Кэмвин, который заставил меня взглянуть в этом направлении.

Другие вопросы по тегам