MySQL: ОШИБКА 1227 (42000): отказано в доступе — не удается СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ

#mysql

#mysql

Вопрос:

Я использую Zip-архив MySQL 5.5.16 без установки на Win7.

После того, как я запустил сервер, команда show databases показала мне список из 2 баз данных: information_schema и test . Последнее пустое.

Где таблица user ?

Я попытался создать нового пользователя с помощью этой команды create user newUser; и получил следующее сообщение об ошибке: ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation

Что мне делать для создания баз данных, таблиц и выполнения всех операций, которые я хочу выполнить? Я не знаю, имеет ли тот факт, что я использую MySQL 5.5.16 noinstall Zip Archive , какое-то отношение к сообщению об ошибке?

Ответ №1:

Первое, что нужно сделать, это запустить это:

 SHOW GRANTS;
  

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

Вместо входа в mysql с

 mysql
  

войдите в систему следующим образом:

 mysql -uroot
  

По умолчанию root @localhost имеет все права и не имеет пароля.

Если вы не можете войти в систему как root без пароля, выполните следующие действия:

Шаг 01) Добавьте два параметра в раздел mysqld my.ini:

 [mysqld]
skip-grant-tables
skip-networking
  

Шаг 02) Перезапустите mysql

 net stop mysql
<wait 10 seconds>
net start mysql
  

Шаг 03) Подключение к mysql

 mysql
  

Шаг 04) Создайте пароль от root@localhost

 UPDATE mysql.user SET password=password('whateverpasswordyoulike')
WHERE user='root' AND host='localhost';
exit
  

Шаг 05) Перезапустите mysql

 net stop mysql
<wait 10 seconds>
net start mysql
  

Шаг 06) Войдите в систему как root с паролем

 mysql -u root -p
  

У вас все должно быть хорошо.

ПРЕДОСТЕРЕЖЕНИЕ: пожалуйста, удалите анонимных пользователей !!!

Комментарии:

1. @CharlieParker my.ini — это файл конфигурации для MySQL / Windows. Я упоминал my.ini , поскольку вопрос начинается с I'm using MySQL 5.5.16 noinstall Zip Archive on Win7.

2. Вы можете добавить строки шага 01) в файл /usr/local/mysql/my.cnf в Mac OS X

3. Это сработало для меня. Однако, в качестве побочного эффекта, это привело к тому, что мое java-приложение не смогло подключиться к базе данных с конкретным пользователем базы данных (т. Е. Не root). Это должно произойти?

4. Альтернатива предложению @goker.cebeci: /etc/mysql/my.cnf

5. Еще одна альтернатива предложению @goker.cebeci (homebrew mariadb) : /usr/local/etc/my.cnf

Ответ №2:

Для меня проблема заключалась (по очень странной причине) в том, что root имел Host % вместо localhost

Я получил вышеуказанную ошибку при попытке DROP USER ; Привилегии, предложенные в ответе выше, у меня уже были, поэтому решение мне не подошло.

БД выглядела так:

 mysql> drop user 'testuser'@'%';
ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation

mysql> select Host,User,drop_priv from user;
 ------ ------------------ ----------- 
| Host | User             | drop_priv |
 ------ ------------------ ----------- 
| %    | mysql.infoschema | N         |
| %    | mysql.session    | N         |
| %    | mysql.sys        | N         |
| %    | root             | Y         |
 ------ ------------------ ----------- 
  

И

 mysql> SHOW GRANTS FOR 'root'@'%';
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| Grants for root@%                                                                                                                                                                                                                                                                                                                                                                                |
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `root`@`%` WITH GRANT OPTION |
 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
  

Я перепробовал много вещей, но в конце концов я изменил Host from % на localhost для соображений безопасности, ничего больше.

 mysql> UPDATE user SET Host='localhost' WHERE user='root' LIMIT 1;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0
  

Я не знаю почему, но это сработало.

 mysql> quit

$ mysql -u root -p
.. ENTER (NO PASSWORD) ..

mysql> drop user 'testuser'@'%';
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
  

Понятия не имею, почему, но надеюсь, что это поможет другим…
Я использую CentOS, в котором есть SELinux и другие вещи, которые, возможно, связаны с другими компонентами. не знаю.

Комментарии:

1. также у меня такая же проблема, пользователь root не может удалить других пользователей