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

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

По какой-то причине MySQL продолжает говорить мне, что команда CREATE отклонена, но проверкаШОУ ГРАНТОВ говорит иначе.Проверьте это:

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 ]

15 голосов
/ 30 января 2013

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

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

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

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

5 голосов
/ 10 марта 2011

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

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

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

0 голосов
/ 12 марта 2015

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

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

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

...