115

I accidentally removed some of the privileges from my MySQL root user, including the ability to alter tables. Is there some way I can restore this user to its original state (with all privileges)?

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'
4

9 に答える 9

160

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';して動作させることができるはずです。

于 2009-11-10T16:13:44.617 に答える
93

誤ってユーザーを削除した場合は、次rootの1つのことができます。

  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を再起動します

編集:2018年10月6日

他の誰かがこの答えを必要とする場合に備えて、私は今日innodb_version 5.6.36-82.010.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');
于 2011-08-03T14:12:42.117 に答える
26

また、root ユーザーだったときに mysql コンソールに表示されない root とデータベースの権限を削除したため、ユーザー mysql>mysql -u 'userName' -p;とパスワードを変更しました。

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

FLUSH PRIVILEGES;

このコマンドの後、すべて root にあるデータベースが表示されます。

ありがとう

于 2012-01-19T11:33:29.613 に答える
3
GRANT ALL ON *.* TO 'user'@'localhost' with GRANT OPTION;

存在する場合はそれぞれのパスワードを使用してrootからログインし、ユーザーが何であれ、上記のコマンドを実行するだけです。

例えば:

GRANT ALL ON *.* TO 'root'@'%' with GRANT OPTION;
于 2012-11-24T06:21:48.640 に答える
3

各列の権限mysql.userに値を挿入または更新するだけです。Y

于 2012-04-05T19:16:06.057 に答える