web-dev-qa-db-ja.com

MySQLの「ルート」ユーザーを削除(phpMyAdminを使用)...復元する方法

私はJoomlaのインストールを(ローカルではWAMPを使用して)MySQLデータベースでサポートしてテストを実行しています...これは、構成が完了したらすべてをオンラインに移行する準備です。

「root」以外のログイン名で設定したスーパーユーザーのパスワードを変更するためにphpMyAdminで作業していました。そうしている間に、3つの「ルート」ユーザーが追加され、phpMyAdminホームページで、これらのルートユーザーにパスワードがないという警告が表示されました。 「All Privileges」を使用して自分のスーパーユーザーを作成したので、ルートユーザーは不要だと思ったので、削除しました。すぐに機能が停止しました...そして今、phpMyAdminの[Users]タブをクリックすると、「No Privileges」という赤いバーが返されます...私の特定のスーパーユーザーがいなくなりました。ただし、phpMyAdmin内を移動できるようです(まだログインしているためか)。

誰かがお願いします私にphpMyAdminを使用してルートユーザーを再度追加することができる方法を(段階的に)教えてください?さまざまな場所に指示が投稿されていますが、ターミナルウィンドウやその他のプログラムを使用しているユーザーに対応しているようです。何ヶ月もの作業が無駄になるのを見たくありません。

編集:Windowsを使用して、私は以下を試しました:

  1. 誰かが示唆したように、wamp/sqlフォルダーのどこにも「resetroot.bat」というファイルはありません...そのため、このオプションは使用できません。
  2. 端末接続を使用してMySQLにアクセスしようとしました。MySQLルートフォルダーにmysql.exeというファイルがありますseems実行時にこれを許可します(いくつかのソリューションが示唆しているように、「mysql_safe.exe」はありません)。しかし、mysqlを-skip-grant-tablesオプションでoutsideを使用して開始することに失敗しましたmysql.exe、そしてmysql.exe内から実行しようとすると、奇妙なプロンプト( "->")が表示され、他のコマンドは機能しないようです。

私はこれが初心者であることを覚えておいてください!私は別のことを試みていますが、成功しませんでした...そのため、ステップバイステップの手順がおそらく必要になります。

2
Superion

はい、ようやく解決策を見つけました。適切なクレジットを与えるために、私は2人から提供された回答をブレンドする必要がありました。RiggsFollyの wampでのrootパスワードのリセットに関するこの質問 への回答と、 これに対するjm666の回答です。 MySQLで削除されたrootユーザーを復元することに関する質問 OS XでMAMPを使用。

Wampユーザーの場合:

  1. Wampシステムトレイアイコンをクリックして、トレイメニューを表示します。MySQL>サービス>サービスの停止をクリックします。
  2. MySQLのmy.iniファイルを編集します...これはSQLデータベースの構成ファイルであり、通常はMySQLデータベースのルートフォルダーにあります(wamp>bin>mysql>mysql5.5[または任意のバージョン])。テキストエディタを使用し、my.iniファイルを下にスクロールして[wampmysqld]。このエントリの直後に、次のコマンドを含む新しい行を挿入します。

    skip-grant-tables
    これは、MySQLデータベースに、rootユーザーやパスワードパラメータなどの制限を上書きすることを伝えます。 これはメジャーのセキュリティホールなので、修復が完了したら、元に戻す必要があります!my.iniファイルを保存します。

  3. WampでMySQLサービスを再開します(MySQL>Service>Start/Resume Serviceをクリックします)。
  4. 次にMySQLコンソールを開きます。MySQL>MySQLコンソールをクリックします。
  5. 「DOS風」のターミナルウィンドウが開きます(パスワードを要求された場合は、Enterキーを押します)。 MySQLプロンプトが表示されます。次のコードブロックをコピーして、プロンプトに貼り付けます。

    INSERT INTO mysql.user
    SET user = 'root', 
    Host = 'localhost', 
    password = '', 
    Select_priv = 'y',
    Insert_priv = 'y',
    Update_priv = 'y',
    Delete_priv = 'y',
    Create_priv = 'y',
    Drop_priv = 'y',
    Reload_priv = 'y',
    Shutdown_priv = 'y',
    Process_priv = 'y',
    File_priv = 'y',
    Grant_priv = 'y',
    References_priv = 'y',
    Index_priv = 'y',
    Alter_priv = 'y',
    Show_db_priv = 'y',
    Super_priv = 'y',
    Create_tmp_table_priv = 'y',
    Lock_tables_priv = 'y',
    Execute_priv = 'y',
    Repl_slave_priv = 'y',
    Repl_client_priv = 'y',
    Create_view_priv = 'y',
    Show_view_priv = 'y',
    Create_routine_priv = 'y',
    Alter_routine_priv = 'y',
    Create_user_priv = 'y',
    Event_priv = 'y',
    Trigger_priv = 'y',
    Create_tablespace_priv = 'y';
    
  6. Enterキーを押します。 (データベースコードの)1行に影響があり、いくつかの警告が表示されたというメッセージが表示されるはずです(おそらく、rootユーザーを混乱させているためです...これらは無視しても問題ありません)。 MySQLターミナルを閉じます。

  7. 手順2で開いたセキュリティホールを覚えていますか?それを修正する時間です。 my.ini SQL構成ファイルを再度開き、skip-grant-tables追加した行。 my.iniファイルを保存して閉じます。
  8. MySQLサービスを再起動します(以前と同じですが、MySQL>サービス>サービスの再起動をクリックしてください)。

これでうまくいくはずです!

初心者向けのMySQLのrootユーザーに関する注意:奇妙な理由により、スーパーユーザーとして別のユーザーを作成した場合でも、MySQLはこのユーザーを操作する必要があるようです...ただし、そうでない場合rootのパスワードを設定すると、これがセキュリティホールであることがわかります。何をするにしても、それを削除しないでください。別のスーパーユーザーアカウントを使用する場合は、非常にあいまいなパスワードを設定し、そのままにしておくことをお勧めします。不注意なユーザーがこれを行うのを防ぐためのより多くの保護が必要であるように思われます(警告または何か)。..それが問題の私の12セントです。

3
Superion

Superionの回答への追加

問題がrootユーザーであるが、どういうわけか特権を「n」に設定していて、今は何も変更できない場合。手順5では、これをコピーして貼り付けることで、ルートを更新して権限を「y」に変更できます。

UPDATE mysql.user
SET Select_priv = 'y',
Insert_priv = 'y',
Update_priv = 'y',
Delete_priv = 'y',
Create_priv = 'y',
Drop_priv = 'y',
Reload_priv = 'y',
Shutdown_priv = 'y',
Process_priv = 'y',
File_priv = 'y',
Grant_priv = 'y',
References_priv = 'y',
Index_priv = 'y',
Alter_priv = 'y',
Show_db_priv = 'y',
Super_priv = 'y',
Create_tmp_table_priv = 'y',
Lock_tables_priv = 'y',
Execute_priv = 'y',
Repl_slave_priv = 'y',
Repl_client_priv = 'y',
Create_view_priv = 'y',
Show_view_priv = 'y',
Create_routine_priv = 'y',
Alter_routine_priv = 'y',
Create_user_priv = 'y',
Event_priv = 'y',
Trigger_priv = 'y',
Create_tablespace_priv = 'y'
WHERE User = 'root';

これで、ルートに対するすべての権利が再び得られました。 @Superionに感謝します。