質問

MySQLのセットアップでMySQLのrootユーザーに問題がありますが、それを修正する方法を考え出すことはできません。どういうわけかrootユーザーを台無しにしたようで、データベースへのアクセスが非常に不安定になりました。

参考として、OS XでMAMPを使用してMySQLサーバーを提供しています。しかし、それがどれほど重要かはわかりません-私がやったことはそれを解決するためにコマンドラインの修正が必要になると思います。

通常どおりMAMPを使用してMySQLを起動し、PHPアプリ用に作成した「標準」ユーザーを使用してデータベースにアクセスできます。ただし、MySQL GUIクライアントおよびphpMyAdminで使用するルートユーザーは、「information_schema」にのみアクセスできます。データベース、および私が手動で作成した2つと、おそらく(そして誤って)許可を広く残しました。私の15程度の他のデータベースには、rootユーザーはアクセスできません。 phpMyAdminをロードすると、ホーム画面に「新しいデータベースを作成:特権なし」と表示されます。

確かに、MAMPダイアログを使用して、ある段階でrootユーザーのパスワードを変更しました。しかし、この問題を引き起こす可能性のある何か他のことをしたかどうかは覚えていません。パスワードを再度変更しようとしましたが、問題はないようです。

コマンドラインを使用してrootパスワードをリセットすることも試みました--mysqlを--skip-grant-tablesで手動で起動し、privをフラッシュすることを含むが、再び、問題を解決するものは何もありません。

アイデアが終わりました。ここの専門家の一人からの段階的なアドバイスと診断に感謝します!

ご協力ありがとうございます。

役に立ちましたか?

解決

それは、MAMPとコマンドラインmysql(およびMAMP以外のmysqlすべて)が異なるためです。

MAMPには独自のmysqlが組み込まれているため、コマンドラインからはアクセスできません。phpmyadminのビルドのみです。

これは私の経験であり、MAMPを使用しており、他のmysqlをRails on Railsなどに使用しています。

他のヒント

同じ問題がありました。管理コンソールまたはクエリブラウザ経由でmysqlデータベースにアクセスするのに、1つのユーザーアカウントのみが機能していました。 skip-grant-tablesを使用すると、rootを含むすべてのアカウントが突然ログインできました。

2006年までバグとして見たが、最後のエントリには、スキップグラントテーブルモードで実行できるコマンドがないため、まだ問題を解決していませんでした。

助けたもの
この回答は、Ben Bakelaar 上記のリンクで説明されているものと似ています。この問題は、 my.ini で名前解決フラグが無効になっている場合に発生します(skip-name-resolve)。これにより、「localhost」を解決するmysqlの機能が停止し、mysql.userテーブルにはlocalhost / rootのエントリのみが含まれます。

mysql.userテーブルのlocalhostエントリを代わりに127.0.0.1に更新すると、skip-name-resolve機能が有効になっている場合でもローカルコンソールにログインできます。

-skip-grant-tablesを使用してサーバーを起動してから、mysqlデータベースの権限テーブルを確認してください:

select * from user where User='root';
select * from tables_priv where User='root';
select * from db where User='root';

次を試すこともできます:

show grants for root@localhost;
show grants for root@'%';
show grants for root@'hostname';

一度これを行うと、rootに完全な権限を与えることができます:

grant all privileges on *.* to root@localhost identified by 'password' with grant option;

コメントには、現在のルート権限が表示されます(--skip-grant-tablesなし)。 'root' @ '%'のエントリがなくても大丈夫です。デフォルトではそれはなく、セキュリティ対策と見なすことができます。

'root' @ 'localhost' 特権を台無しにしたようです。 すべての特権をオンにします。は奇妙です。通常、 GRANT ALL PRIVILEGES ON *。* または GRANT ALL PRIVILEGES ON myDatabase.myTable のようなものがあります。 GRANT は、権限を付与するデータベースやテーブルを指定していません。あなたのクライアントがどうやってそれを作り出したのか分かりません。 mysqlコマンドラインクライアントでは再現できません(空の文字列、空白、あらゆる種類の引用符を試してみました...)、mysqlはGRANTステートメントを拒否します(もちろん正しい動作です)。 MAMPは本当に奇妙なことをしているようです。私はあなたのような GRANT を再現できないので、mysqlがそれをどのように解釈するか言うことはできませんが、グローバルレベルで特権を 'N' に設定していると思います。

それを修正するには、適切な権限を持つユーザーが必要です。通常、ユーザーは 'root' @ 'localhost' 'root' @ 'your-hostname' です。運が良ければ、 'root' @ 'your-hostname' で問題ありません。ちなみに、mysql接続は次のように機能します。 localhost に接続する場合、 'root' @ 'localhost' として接続します( 127.0.0.1 'root' @ 'localhost' )でもあると思います。 your-hostname に接続する場合、 'root' @ 'your-hostname' として接続します。このユーザーの権限がまだ問題ない場合は、 'root' @ 'localhost' の権限を更新すれば完了です。

コメントでは、ソケットが異常な場所にあるため、 127.0.0.1 を介して接続できないと言います。エラーを誤解していると思います。 IIRCは、 'localhost' に接続する場合はソケット経由で接続しますが、 127.0.0.1 または your-hostname に接続する場合はTCP / IP経由で接続します。 mysqlがソケット経由で接続しようとして、正しい場所を指定しなかったためにソケットを見つけられない場合、エラーメッセージにはmysqlがソケットを見つけようとした場所が示されます。エラーメッセージはそうではありません。あなたのエラーはネットワークエラーだと思います。 -skip-networking オプションを使用してmysql-serverを起動したか、設定で誤ったbind-addressが指定されている可能性があります。最初にそれを修正する必要があります。そうしないと 'root' @ 'your-hostname' として接続できません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top