Как я могу восстановить полные права пользователей root root?
Я случайно удалил некоторые привилегии от моего пользователя root, включая возможность изменять таблицы. Есть ли способ восстановить этот пользователь в исходное состояние (со всеми привилегиями)?
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'
Ответы
Ответ 1
Если GRANT ALL
не работает, попробуйте:
- Остановить
mysqld
и перезапустить его с помощью параметра --skip-grant-tables
.
- Подключитесь к серверу
mysqld
с помощью только: mysql
(т.е. нет -p
, и имя пользователя может не понадобиться).
-
Выполните следующие команды в клиенте mysql:
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
После этого вы сможете запустить GRANT ALL ON *.* TO 'root'@'localhost';
и заставить его работать.
Ответ 2
Если вы по ошибке удалили пользователя root
, вы можете сделать одно:
- Остановить службу MySQL
- Выполнить
mysqld_safe --skip-grant-tables &
- Введите
mysql -u root -p
и нажмите enter.
- Введите свой пароль
- В командной строке 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
Ответ 3
я также удаляю привилегии root и базы данных, которые не отображаются в консоли mysql, когда я был пользователем root, поэтому изменил пользователя на mysql>mysql -u 'userName' -p;
и пароль;
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
после этой команды все они отображают базу данных в корневом каталоге.
Спасибо
Ответ 4
GRANT ALL ON *.* TO 'user'@'localhost' with GRANT OPTION;
Просто войдите в систему от root, используя соответствующий пароль, если таковой имеется, и просто запустите указанную выше команду независимо от пользователя.
Например:
GRANT ALL ON *.* TO 'root'@'%' with GRANT OPTION;
Ответ 5
Просто вставьте или обновите mysql.user
со значением Y
в каждой привилегии столбца.
То же самое.
Полный ответ: http://www.myee.web.id/?p=869
Ответ 6
Я отказал привилегии вставки и перезагрузки root. Поэтому после обновления разрешений FLUSH PRIVILEGES не работал (из-за отсутствия привилегий перезагрузки). Поэтому я использовал пользователя debian-sys-maint на Ubuntu 16.04 для восстановления привилегий user.root. Вы можете найти пароль user.debian-sys-maint из этого файла
sudo cat /etc/mysql/debian.cnf