Use Database Config: (default/test)
[default] > default
Warning: mysql_connect(): Access denied for user 'domain name'@'ip-address' (using password: YES) in /home/domain name/www/cakephp-cakephp1x-fc6802b/cake/libs/model/datasources/dbo/dbo_mysql.php on line 540
./app/database.phpを用意し、そこにはテーブルを用意した上で参照可能なDBの記載を行っています。
上記のip-addressの部分は、ビジネスプロで提供される3つのデータベースとは異なるIPでした。
エラーを解消する方法をご存知の方、いらっしゃいますでしょうか?
コメント(12件)
意図せず、'ip-address'というサーバに接続に行っているようでうすので、このip-addressをgrepして、設定している箇所をまずは探してみてはどうですか?
念のために確認ですが、./app/database.phpは./app/config/database.phpのtypoですよね?
./app/database.phpはtypoです。。失礼しました!汲み取っていただいて、ありがとうございます。(苦笑
以下のコマンドで /home/domain name/www/cakephp-cakephp1x-fc6802b/ 配下を検索してみましたが見つかりませんでした。
find . -type f -name "*.*" | xargs grep "ip-address"
さくらのビジネスプロで割り当てられた3つのDBサーバーのIPとは異なる謎のIPが返ってくるんですよねー。。
一応、打ち間違いの可能性も考慮して、何度も時間を空けて設定を見直してみているのですが、同じにしか見えないし・・・
ip-addressのaaa.bbb.ccc.dddのaaa部分だけで検索してみても出てきませんでした・・・
-appとかで、appディレクトリを指定してみると、結果変わったりしますか?
試してみましたが、1.3.0では結果に変化はありませんでした。。
バグにしても、今ひとつ釈然としないです。。どこの何を見に行っているんだか。。
僕も手元のWindows環境では確認しましたが、そのようなエラーは出ませんね。
原因は不明ですが、もし、僕が同じ状況で試すとすれば、
testの方を選択してみてどうなるかとか、
var $dummy = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'database_name',
'prefix' => '',
);
見たいなのを、database.phpに追記して、dummyが選択できるようになっているかで、正しく、database.phpが読まれているかなんかを確認するとかですかね。
あまり、参考にならなくて済みません。
※おそらくo9boさんが利用しているサーバーのIPアドレスではないかと思うのですが・・・
Warning: mysql_connect(): Access denied for user 'domain name'@'ip-address' (using password: YES) in /home/domain name/www/cakephp-cakephp1x-fc6802b/cake/libs/model/datasources/dbo/dbo_mysql.php on line 540
設定されているアカウント名あるいはパスワードが違うのが原因ですので、loginとpasswordを再度確認してみてください。
※表示されている'domain name'@'ip-address'の'domain name'に間違いがないのでしたら、パスワードの方が間違っているのだと思います。
アカウント・パスワードともに間違いがなくて、現在、DBサーバーのIPを設定しているのでしたら、ホスト名(「mysql**.db.sakura.ne.jp」の方)で設定して試してみてください。
それでも駄目なら、サポートに問い合わせた方が良いと思います。
おそらく追加されているDBアカウントの設定が問題が少しあります。
※さくらではドメイン追加時にDBのアカウントが自動作成されるのですか?
database.phpで「host」に「localhost」あるいは「127.0.0.1」以外を設定した場合、上記のようなエラーが発生する場合があります。
発生条件として現在分かっているのは、
1.「host」に「localhost」あるいは「127.0.0.1」以外を設定した場合
2.エラーにある「'domain name'@'ip-address'」という条件のDBユーザーが作成されていない
3.エラーにある「'domain name'@'ip-address'」のホスト部分が一致する他のDBユーザーは存在する
上記1~3の条件すべてがそろっている場合に発生するようです。
※上記条件がそろっている場合、Windowsでも発生します。
ちなみに、1と2に合致して3に合致しない場合は、以下のようなエラーになります。
Warning: mysql_connect(): Host 'コンピュータ名' is not allowed to connect to this My
SQL server in (略)\cake\libs\model\datasources\dbo\dbo_
mysql.php on line 540
・・・という理由ですので、DBユーザー作成時にホストを指定する権限がないユーザー側では対処できないと思います。
サポートに事情を説明して、エラーにある「'domain name'@'ip-address'」のホスト「ip-address」のユーザー「domain name」を作成してもらうか、ローカルで構築してからさくらのサーバーにアップするか、どちらか好きな方法で対処するしかないかもしれません。
※Windowsで1.3.0のbakeはまだ不具合があるようです。
上記の部分は問題ありませんが、その後手順を進めるとNoticeと『Could not find template for model』というエラーが出て、作成されるモデル.phpの中身が空になります。
これが原因でコントローラーの作成もエラーになるようです。
tdoiさんは問題なかったでしょうか・・・?
FreeBSDではありませんが、linux(ubuntu)では大丈夫でした。
もしWinでcake bakeを利用する場合は、バージョン1.2.6を使用してみてください。
ありがとうございます!
他の環境は検証していませんです。
残念ながら、テストも同じでしたねー。
> rouge_2008
ありがとうございます!
詳細なご説明で、よく理解できました。
ご説明いただいた内容で、ほぼ決まりっぽいですね。
自分で直せるレベルなら、いじって使おうかと思ったのですが、結構問題多そうなので、おとなしくstableな最新のバージョンを利用するか、ローカルで構築するかで進めたいと思います。
お二方とも、ほんとうにありがとうございましたー!
※Stable版でも質問の現象は発生しますので、bakeを利用したい場合は、ローカルで構築する必要があると思います。
それから、うっかり書き損じたので追記します。
厳密には1の条件は以下のようになります。
1.「host」に「localhost」あるいは「127.0.0.1」、あるいはIPが127.0.0.1以外のサーバーのホスト名を設定した場合
勘違いしている部分もあるかもしれませんが、新たに分かった事を追記します。
条件に合致する場合、mysql_connectにより接続する基本的なスクリプトでも同じエラーが発生しました。
CakePHPのbakeに限らず発生しますので、PHPまたはMySQLの仕様だと思います。
ホストやユーザーなどをdatabase.phpと同じ設定にして、MySQLに接続するスクリプトをブラウザで実行した場合、正常に接続できますか?
DNS障害も考えられると思いますし、ブラウザからも接続できないようでしたら、やはり一度サポートに連絡してみた方がいいと思います。
※ちなみに返って来るエラーの「'domain name'@'ip-address'」には数パターンあるようです。
1.「'ユーザー名'@'接続元サーバーのIPアドレス'」
※DNS参照が出来ない場合に(?)上記のようにIPアドレスになる可能性があります。(こちらはローカル環境での動作テストですので、hostsファイルに記述がない場合に上記のようにIPアドレスになりました。)
2.「'ユーザー名'@'接続元サーバーのホスト名'」
※一つのIPアドレスに対してホストが複数設定されている場合、一番最初に設定されているホストになるようです。
3.「'ユーザー名'@'接続元サーバーのコンピュータ名'」
こちらはまだ良く分かっていませんが、自サーバーに「localhost」や「127.0.0.1」以外で接続した場合、なおかつそのIPとホストがhostsに登録されていない場合(?)にコンピュータ名になるようです。
まだ分かっていない部分もありますが、動作確認する場合の参考にしてください。
僕が大ボケかましていましたね。
ip-addressは接続元サーバ、つまり、WebサーバのIPですよね。
あと、僕の環境ではWindows上でModelのbakeはできましたよ。それ以上は試していないのですが。
> o9boさん
ちょっとさくらのサイトのビジネスプロの説明を読んだのですが、
「上記のip-addressの部分は、ビジネスプロで提供される3つのデータベースとは異なるIPでした。」
とのことですが、3つというのは、1つのMySQLサーバに対して、3つデータベースを作成できるということですよね?これらは作成しましたか?
以前に、さくらを利用した際の記憶なのでうろ覚えですが、さくらインターネットの管理コントロールパネルから、データベースの設定みたいなのから作成できた気がします。その際に、そのデータベースにアクセスするユーザも作成できるはずです。
まずはここを確認してみてください。
で、さくらの提供するサービスの構成がどうなっているか分からないのですが、WebサーバとMySQLサーバは同一ホストで動作していませんか?
仮にWebサーバのIPが192.168.0.39だったとして、同一ホストでMySQLが動作している場合に、
接続時に、localhostを指定した場合と、192.168.0.39を指定した場合とでは挙動が異なります。正確に言うと認証が変わります。
MySQLは、ユーザ名+接続元ホストに対して認証を行うので、
userはlocalhostからは許可するが、ネットワーク経由のアクセスは許可しない
という設定になっていれば、localhostとして接続すれば接続できるが、同一ホストを指すものだとしても、192.168.0.39と指定するとネットワーク経由とみなされて、アクセスできません。
と、ここまで書いて気になったのですが、デフォルトの状態でサイトトップにアクセスすると、データベースに接続できるかなどを表示してくれると思いますが、そこもひょっとしてエラーになっていませんか?
1.3.0-RC2でbakeできたのですか?
こちらは、1.2.6ではbake出来るのですが、1.3.0-RC2ではエラーが出力されて空のモデルファイルが作成されます。
※クラスの作成が出来ていないので、その後のコントローラーの作成等にも失敗します。
こちらの環境の問題なのでしょうか・・・
とりあえず、私の環境だけかもしれませんので、必要になるまではこのままにして置こうと思います。
正式リリースでは大丈夫になっているかもしれませんから・・・
後、o9boさんへの確認に割り込む形になってすみませんが、さくらのビジネスプロの場合、サーバー3つに対してデータベースが各3個なのではなく、使用できるデータベースが全部で3個なのだと思います。
それから、WEBサーバーとデータベースサーバーは別サーバーになっているようです。
http://support.sakura.ad.jp/support/manual/rs/db_make.html
--------------------------------------------------
データベース サーバ :
データベースサーバのホスト名です。
さくらのレンタルサーバでは、ウェブなどの主要なサービス提供サーバとは別に、データベース専用の外部サーバをご用意しています。
---------------------------------------------------
> o9boさん
ユーザーの権限はどうなっているでしょうか?
記載がないので分かりませんが、初期ユーザーとは別のユーザーでデータベースにアクセスしたい場合は、追加したユーザーに管理者権限を付与してから、そのユーザーでコントロールパネルにログインしてデータベースを作成するといいのかもしれません。
tdoiさんが書かれているように、データベースにアクセス可能なユーザーの設定が出来ない場合は、上記手順を試してみてください。
・ユーザーの権限
http://support.sakura.ad.jp/support/manual/rs/setuser_bs_a.shtml
・スタートアップガイド目次
http://support.sakura.ad.jp/support/manual/start/bz_index.html
・管理者ユーザーの設定
http://support.sakura.ad.jp/support/manual/start/bz_startup_3.html