MySQLの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'
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';
を実行して動作させることができます。
root
ユーザーを誤って削除してしまった場合、次の1つを行うことができます。
mysqld_safe --skip-grant-tables &
を実行しますmysql -u root -p
と入力してEnterキーを押します。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を再起動します
編集:2018年10月6日
他の誰かがこの答えを必要とする場合は、今日innodb_version 5.6.36-82.および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');
また、rootユーザーであったときにmysqlコンソールに表示されなかったrootおよびデータベースの特権も削除するため、mysql>mysql -u 'userName' -p;
およびパスワードによってユーザーを変更しました。
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
このコマンドの後、すべてのデータベースがrootに表示されます。
ありがとう
GRANT ALL ON *.* TO 'user'@'localhost' with GRANT OPTION;
存在する場合はそれぞれのパスワードを使用してrootからログインし、上記のコマンドをユーザーが何でも実行するだけです。
例えば:
GRANT ALL ON *.* TO 'root'@'%' with GRANT OPTION;
ローカルコンピュータで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:問題は解決しました!!!!
ルートへの挿入と再読み込みの特権を拒否しました。そのため、権限を更新した後、FLUSH PRIVILEGESは機能していませんでした(リロード権限がないため)。そこで、Ubuntu 16.04でdebian-sys-maintユーザーを使用してuser.root権限を復元しました。このファイルからuser.debian-sys-maintのパスワードを見つけることができます
Sudo cat /etc/mysql/debian.cnf