Команда CREATE запрещена для пользователя, у которого есть ВСЕ ПРИВИЛЕГИИ

Я пытаюсь настроить ведомость репликации MySQL, и мне очень сложно работать LOAD DATA FROM MASTER;. Да, я знаю, что он устарел, но я запускаю MySQL 5.1, и это не моя проблема на данный момент.

По какой-то причине MySQL продолжает сообщать мне, что команда CREATE отрицается, но проверка SHOW GRANTS говорит об обратном. Проверьте это:

mysql> SHOW GRANTS;
+--------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]%                                                                                            |
+--------------------------------------------------------------------------------------------------------------------+
| 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 [email protected]                                                                                            |
+----------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'replicator'@'localhost' IDENTIFIED BY PASSWORD '*ABCDEFABCDEFABCDEFABCDEFBLAHBLAHBLAHBLAH' |
+----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Итак, какие-то мысли о том, почему все это испортилось? Да, я сделал FLUSH PRIVILEGES много раз.

Заранее благодарим за любой совет, который вы можете дать.

Ответ 1

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

Когда вы заходите в следующий раз, запустите этот запрос:

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 могут быть не синхронизированы.

Ответ 2

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

Ответ 3

Как ни странно, просто QUIT-клиент и повторное подключение разрешили проблему! Очевидно, FLUSH PRIVILEGES недостаточно.

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

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

Ответ 4

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

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

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