- ベストアンサー
my.iniで設定するパスワードの意味がよくわかりません
- 4.0.16から、4.0.26にバージョンアップした際に、my.iniで設定するパスワードの意味について理解が深まりません。
- バージョン4.0.16の時は、mysql.exeを使用してDOS窓でデータベース一覧を表示することができましたが、バージョン4.0.26や4.1x系では、testのみが表示される問題が発生しました。
- PHPプログラムの移行先であるMySQL 4.0.26でmy.iniに記入したパスワードが認識されず、接続エラーが発生しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> # 少なくとも4.0.16では、-rootなどの儀式は不要で、 > # musql.exeを起動するだけでshow database; が利いたのです。 my.iniにWinMySQLAdminと同じようにmysql.exeが接続する際にデフォルトで使用するユーザー名・パスワードを指定しておくことができます。 その場合はmysql.exeだけでも接続できます。 デフォルトを指定しておいても他のユーザーで接続したいなら mysql -uUSERNAME ~ とやればそれが利用されます。 ちなみに -root ではなく -urootです。 -uがユーザー名の指定を表し、rootがユーザー名です。 -uとrootがくっついていて分かりにくいですが注意すべき点です。 パスワードの場合も同じで-pのあとに間をおかずにそのまま入力します。 分かりやすく mysql --user=USERNAME --password=PASSWORD と書くこともできます。 つまり --user= を省略した形が -u --password= を省略した形が -p というわけです。 > 確かに、セットアップして一回目の起動の際に、管理者のID/Passを > 尋ねられました。これはmy.iniの話ですよね? 何のプログラムの初回起動時に尋ねられたのでしょうか? WinMySQLAdminに訊かれたのなら入力したものはmy.iniに書き加えられます。 質問文での [WinMySQLadmin] user=root password=mypassword がそうです。 なので、MySQLサーバーに対してユーザーの設定をしてくれているわけではありません。 あくまでWinMySQLAdminが接続しにいくときのユーザーの指定をしているだけです。 ちなみにMySQL 4.1以降はWinMySQLAdminは付いていません。(古いツールなのでサポートされなくなりました) (4.1の初期のバージョンには付いていますが正式版以降にはありません) 代わりとして MySQL Administrator http://www.mysql.com/products/tools/administrator/ や phpMyAdmin で操作することが推奨されています。
その他の回答 (2)
- Ethersky
- ベストアンサー率71% (168/235)
> 'mysql' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。 mysql.exeのあるディレクトリのパスが通っていないからこうなります。 パスを通せばカレントディレクトリがどこであっても実行できるようになります。 パスが通っていないならmysql.exeのあるディレクトリにカレントディレクトリを移動してからなら動かせます。 >これがなぜかできません・・C:\ってことは、mysql.exeでなく、 >cmd.exeですよね? いいえ。 cmd.exeはあくまでコマンドプロンプトを出すだけ。 mysql は mysql.exe のことです。(.exeや.com、.bat等の実行形式のものの拡張子は省略できます) C:\上で実行できるのは前述の「パスを通しているため」です。 > ユーザー名、パスワードを設定した覚えはないのですが、そもそも、データベースmysqlに私のユーザー名、パスワードはなんと保存されているのか知るすべはありますでしょうか? 新規にインストールしたての場合はroot以外にユーザーは登録されていません。 また、rootのパスワードは未設定です。 userテーブルを見ても、登録されているユーザー名は分かりますがパスワードはプレーンテキスト(パスワードの文字列そのまま)ではないので分かりません。 ちなみにphpMyAdminでユーザーの管理ができます。 テーブルを直接操作するのではなく、分かりやすく操作できます。 phpMyAdmin 2.7.0の場合は、トップページの「特権」というリンクから行けます。 (2.7.0以外でもほとんど同じです) 但し、ユーザーの登録や削除等の操作は管理者権限でないとできません。 そのためmysqlという名前のデータベースにもアクセスできるのはデフォルトでは管理者権限のみです。 そしてその管理者権限はrootという名前のユーザーというわけです。 もちろん、root以外にも管理者権限のユーザーを登録したり、rootと言う名前を別の名前に変えることもできます。 通常、管理者権限のアカウントは管理用にのみ使用し、実際にプログラムがMySQLサーバーに接続しに行く時には使用しません。 (セキュリティ上大問題ですので) また、新規にインストールしたての場合はrootにパスワードが指定されていないのでパスワードを登録する必要もあります。
お礼
Etherskyさん、本当にありがとうございました。 結論からいいますとおかげさまで長年の(?)謎が解けました。 今後は、おかげさまで4.1.xもいけそうです。 # 少なくとも4.0.16では、-rootなどの儀式は不要で、 # musql.exeを起動するだけでshow database; が利いたのです。 > mysql.exeのあるディレクトリのパスが通っていないからこうなります。 cmd.exeで「'mysql' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 といわれた時点でそのように考えるべきだったのですね。 Namazuなどはインストーラが自動でPathを通して くれるので、てっきりMySQL4.0.26も通してくれてもらえていると 思ってましたが、環境変数にPathを設定することで解決しました。 > C:\上で実行できるのは前述の「パスを通しているため」です。 これも実によくわかりました。 おかげさまで今までなんとなくセットアップマニュアルに 書いてあったことを実行するだけに過ぎなかったPathを通す作業の 意義までわかってしまいました。 > ちなみにphpMyAdminでユーザーの管理ができます。 > テーブルを直接操作するのではなく、分かりやすく操作できます。 おお!そうなのですか。 > phpMyAdmin 2.7.0の場合は、トップページの「特権」というリンクから行けます。 当方が使っているのはphpMyAdmin 2.6.3-pl1 ですが 確かに特権リンクをみつけました。 > (セキュリティ上大問題ですので) これは、強く心に留めておきます。 所詮は社内LANなどで身辺データ整理に利用する程度なので (いずれはlolipopなどでも遊んでみたいとは思っていますが) > また、新規にインストールしたての場合はrootにパスワードが指定されていないので 確かに、セットアップして一回目の起動の際に、管理者のID/Passを 尋ねられました。これはmy.iniの話ですよね? 以上、もし追加コメント等いただける場合は追伸いただければ幸いですが、 今晩にでも締め切るようにいたします。本当にありがとうございました。
- Ethersky
- ベストアンサー率71% (168/235)
> show databases -A -uroot -pPASSWORD; や show databases -A -urootD; などととやっても うまくいかなくて当たり前です。 認証するのは接続するときなんですからmysql.exeを実行した時点で接続は完了します。 show databases;はもうSQL文なんですからここでは認証できるはずもありません。 > 他方、4.0.26で、my.iniに、 > [WinMySQLadmin] > user=root > password=mypassword > と設定してあるものが認識されていないようです。 これはWinMySQLadminがMySQLサーバーに接続するときのユーザー名とパスワードを指定しているだけです。 他の物には関係ありません。 > $DBPASSWORD = ""; //←ここを空白にする > とやったら、MySQLに接続できました。 ユーザーの情報(ユーザー名とパスワードおよび権限等)はMySQLサーバーにmysqlという名前のデータベースに保存・管理されています。 これと照合して認証するわけですからmy.iniは関係ありません。 また、新規にMySQLサーバーをインストールした場合はroot(管理者権限のユーザー)のパスワードは指定されていません。(つまり空欄がパスワードである) よって、パスワードが空欄であれば認証できるということです。 最後に始めの質問での正しい使用例を以下に示します。 C:\>mysql -uUSERNAME -pPASSWORD Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 to server version: 4.0.26-nt-max Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show databases; +-----------+ | Database | +-----------+ | test | | mysql | +-----------+ 2 rows in set (0.03 sec)
お礼
> ユーザー名、パスワードを設定した覚えはないのですが、 > そもそも、データベースmysqlに私のユーザー名、パスワードは > なんと保存されているのか知るすべはありますでしょうか? すみません、phpMyAdminからデータベース=mysqlの userテーブルを のぞいてみたら、次のようになってました。 (横に長いので行と列を入れ替えて縦長にして掲示します。) やっぱりroot+passなしというユーザーしかいないのですよね? だとしたら、ご教示のようにDOS窓で C:\>mysql -uroot -pとやればいいように思うのですが。 Host localhost localhost User root Password Select_priv Y N Insert_priv Y N Update_priv Y N Delete_priv Y N Create_priv Y N Drop_priv Y N Reload_priv Y N Shutdown_priv Y N Process_priv Y N File_priv Y N Grant_priv Y N References_priv Y N Index_priv Y N Alter_priv Y N Show_db_priv Y N Super_priv Y N Create_tmp_table_priv Y N Lock_tables_priv Y N Execute_priv Y N Repl_slave_priv Y N Repl_client_priv Y N ssl_type ssl_cipher [BLOB - 0 バイト] [BLOB - 0 バイト] x509_issuer [BLOB - 0 バイト] [BLOB - 0 バイト] x509_subject [BLOB - 0 バイト] [BLOB - 0 バイト] max_questions 0 0 max_updates 0 0 max_connections 0 0
補足
Etherskyさん、いつもお世話になっております。 > 認証するのは接続するときなんですからmysql.exeを実行した時点で接続は完了します。 そういう仕組みでしたか。 ようやくわかってきました・・ > これはWinMySQLadminがMySQLサーバーに接続するときのユーザー名とパスワードを指定しているだけです。 > 他の物には関係ありません。 これ(my.iniのID/パスの意義)は、本当によくわからなくて悩んでました。 つまりは、削除してしまってもかまわないものなのでしょうか。 > よって、パスワードが空欄であれば認証できるということです。 非常に理路整然としたご解説、感謝にたえません。 今までの謎が次々と晴れていくようで、本当に勉強になります。 > 最後に始めの質問での正しい使用例を以下に示します。 > C:\>mysql -uUSERNAME -pPASSWORD > Welcome to the MySQL monitor. Commands end with ; or \g. これがなぜかできません・・C:\ってことは、mysql.exeでなく、 cmd.exeですよね? winmysqladmin.exeが起動した状態で、cmd.exeを実行すると、 ■C:\>mysql -uroot -p[enter] 'mysql' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 ■C:\Documents and Settings\n-sawazu>mysql -uroot -p[enter] 同上のエラーで、うんともすんともいいません・・ ユーザー名、パスワードを設定した覚えはないのですが、 そもそも、データベースmysqlに私のユーザー名、パスワードは なんと保存されているのか知るすべはありますでしょうか?
お礼
Etherskyさん、一連のご講義、本当に勉強になりました。 まずは御礼申し上げます。 > my.iniにWinMySQLAdminと同じようにmysql.exeが接続する際にデフォルトで > 使用するユーザー名・パスワードを指定しておくことができます。 なるほど。今まで(4.0.16)は、これを指定していたから使えていた のでしょうね。初めてMySQLをセットアップしたときは、あちらこちらの Web情報を切り貼りしていて「何とか動く」環境を作ったものですから、 今回はその設定をしていなかったのだと思います。 > -uとrootがくっついていて分かりにくいですが注意すべき点です。 こちらも、よく打ち間違えます。。念を押していただけたおかげで もう忘れることはなさそうです。 > 何のプログラムの初回起動時に尋ねられたのでしょうか? > WinMySQLAdminに訊かれたのなら入力したものはmy.iniに書き加えられます。 ご推察のとおり、WinMySQLAdminに訊かれたものです。 my.iniも、いろいろいじったので、少し混乱していました。 #おかげさまで整理がつきました。 > 代わりとして > MySQL Administrator > や > phpMyAdmin え そうなのですか? また覚えることが増えそうですが、身の程知らずな新しいもの好きなので ぜひ挑戦したいと思います。明日にでも入門本を一冊買ってきます。 とりあえずパスを通してshow databases;ができたので、表題の目的は 達成することができました。この過程で、大変わかりやすくご解説 いただけたおかげで、本当に勉強になりました。 ログは大切に保存しておくことにします。本当にありがとうございました。