Используя CentOS 6, вы вошли в MySQL как root
, введя команду:
create user 'user123' identified by 'pass123';
работает отлично. Но когда я пытаюсь дать этому пользователю super user privileges
с участием:
grant all on *.* to 'user123' identified by 'pass123';
Я получаю сообщение об ошибке:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
затем
select * from mysql.user;
показывает, что у root есть Y во всех столбцах, поэтому он должен иметь все привилегии.
Я был бы очень признателен, если бы кто-нибудь помог мне выяснить, почему root не может предоставить привилегии, поскольку я не понимаю, почему это не работает.
Спасибо
Привилегии в MySQL привязаны как к имени пользователя и «хозяин». Хост может быть доменным именем, IP-адресом или localhost. Любой из них может включать подстановочный знак %
. Если вы подключаетесь из неправильного места, даже с правильным именем пользователя и паролем, вы все равно получите сообщение об отказе в разрешении.
Каждый из этих разных пользователей может иметь разный доступ к разным базам данных, таблицам, строкам и командам.
Также стоит отметить, что 127.0.0.1 - это не то же самое, что localhost, поскольку используется mysql
клиент в командной строке будет использовать сокет, а не IP для подключения. Если вы хотите использовать IP для подключения при использовании mysql
клиент на сервере MySQL, вы можете указать -h <IP address>
.
Чтобы увидеть всех разных «пользователей»:
SELECT user,host,password FROM mysql.user;
В конце концов, пришлось обойти таблицы грантов. Посмотреть здесь:
о том, как это сделать