Как я могу восстановить полные привилегии пользователя MySQL? - PullRequest
101 голосов
/ 10 ноября 2009

Я случайно удалил некоторые привилегии из моего пользователя root MySQL, в том числе возможность изменять таблицы. Можно ли как-нибудь восстановить этого пользователя в исходное состояние (со всеми привилегиями)?

UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'root';
# MySQL returned an empty result set (i.e. zero rows).
FLUSH PRIVILEGES ;
# MySQL returned an empty result set (i.e. zero rows).


#1045 - Access denied for user 'root'@'localhost' (using password: YES)
GRANT ALL ON *.* TO 'root'@'localhost'

Ответы [ 7 ]

142 голосов
/ 10 ноября 2009

Если GRANT ALL не работает, попробуйте:

  1. Остановите mysqld и перезапустите его с параметром --skip-grant-tables.
  2. Подключитесь к серверу mysqld с помощью просто: mysql (т. Е. Опция -p отсутствует, и имя пользователя может не потребоваться).
  3. Выполните следующие команды в клиенте mysql:

    UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

    FLUSH PRIVILEGES;

После этого вы сможете запустить GRANT ALL ON *.* TO 'root'@'localhost'; и заставить его работать.

83 голосов
/ 03 августа 2011

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

  1. Остановить службу MySQL
  2. Выполнить mysqld_safe --skip-grant-tables &
  3. Введите mysql -u root -p и нажмите enter.
  4. Введите ваш пароль
  5. В командной строке mysql введите: use mysql;

Затем выполните этот запрос:

insert into `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`) 
values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');

затем перезапустите mysqld

РЕДАКТИРОВАТЬ: 6 октября 2018

В случае, если кому-то еще нужен этот ответ, я попробовал его сегодня, используя innodb_version 5.6.36-82.0 и 10.1.24-MariaDB , и он работает, если вы УДАЛИТЕ ФИЛЬМЫ одинарные кавычки, просто удалите их):

insert into user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections) 
values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');
23 голосов
/ 19 января 2012

Я также удаляю привилегии root и базы данных, не отображаемые в консоли mysql, когда я был пользователем root, поэтому изменил пользователя на mysql>mysql -u 'userName' -p; и пароль;

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

FLUSH PRIVILEGES;

после этой команды все это показывает базу данных в корне.

Спасибо

5 голосов
/ 24 ноября 2012
GRANT ALL ON *.* TO 'user'@'localhost' with GRANT OPTION;

Просто войдите в систему с правами root, используя соответствующий пароль, если таковой имеется, и просто выполните указанную выше команду для любого пользователя.

Например:

GRANT ALL ON *.* TO 'root'@'%' with GRANT OPTION;
2 голосов
/ 27 декабря 2017

Если вы используете WAMP на локальном компьютере (mysql версия 5.7.14) Шаг 1: открыть файл my.ini Шаг 2: откомментируйте эту строку 'skip-grant-tables', удалив точку с запятой шаг 3: перезапустите сервер MySQL шаг 4: запустить консоль MySQL шаг 5:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

Шаг 6: Проблема решена !!!!

2 голосов
/ 05 апреля 2012

Просто вставьте или обновите mysql.user со значением Y в каждом столбце привилегий.

То же самое выше.

Полный ответ: http://www.myee.web.id/?p=869

1 голос
/ 24 сентября 2017

Я отказал в праве на вставку и перезагрузку root. Таким образом, после обновления разрешений FLUSH PRIVILEGES не работал (из-за отсутствия привилегии перезагрузки). Поэтому я использовал пользователя debian-sys-maint в Ubuntu 16.04 для восстановления привилегий user.root. Вы можете найти пароль для user.debian-sys-maint из этого файла

sudo cat /etc/mysql/debian.cnf
...