質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

730閲覧

PDOでユーザの誤りによりMySQLにアクセスできない

JanTh1989

総合スコア87

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/05/11 01:21

編集2023/05/11 01:31

実現したいこと

別サーバのMySQLに接続してページ表示を行うWEB環境を、現在のサーバから別サーバに移設したい。

前提

PHP、apacheで動作しているWEB環境を、現在のサーバから別サーバに移設したい。
DB(MySQL)はページとは別のサーバに設けていて、PDOを用いてアクセスしています。
開発作業時は、同ホストに別名DBを準備して、既存のWEB環境も同じ場所に別名で丸コピ。
あとはapache設定やhtaccess変更などのほか、DBアクセス関連はWEB環境の参照DB名の定義を作ったDB名に変更するだけで、DB参照、ページ表示は行えています。
別サーバへの移設作業でも、同様の作業を行ったのですが、URLにアクセスしたところ、ユーザ名誤りによりPDFのコンストラクタで例外が発生してしまっているのが現状になります。

発生している問題・エラーメッセージ

例外内容

exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'XXXXXXr'@'YYYYYYYY' (using password: YES)'

該当のソースコード

PHP

1define("DB_HOST", "ホスト名"); 2define("DB_NAME", "DB名"); 3define("DB_USER", "DBユーザ名"); 4define("DB_PASS", "DBパスワード"); 5 6$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8'; 7$db_user = DB_USER; 8$db_pass = DB_PASS; 9 10$dbh = new PDO($dsn , $db_user, $db_pass);

※定義は別ファイルであったり、処理も実際にはクラスのコンストラクタで実施しているもので、変数はクラスのプロパティであったりなどの違いはありますが、実質やっていることはこの内容になります。

試したこと

最初、別サーバに配置して表示を試みた時は、PDOでアクセスに失敗していました。

SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'XXXXXXX' (10061)

こちらについては、実際にサーバからping、sshで確認をとったところ、sshのフィンガープリントで引っかかっており、そちらについて解消させた結果、アクセスはするようになりました。
そして現在になります。
私のPCからsshでDBサーバにアクセスし、NavicatでDB接続する際には、自身のユーザでサーバアクセスをして、NavicatのDB接続設定のユーザ名はサーバアクセスした名前に設定しています。
「ssh XXXXXX@AAA.BBB.CCC.DDD」のXXXXXXですね。
そこを考えますと、移設先のサーバでPDO実行時のDBサーバアクセスに使用しているユーザが、コードで設定しているDBユーザ名とは異なるものになっているのではないかと考えています。
サーバのユーザとは?と調査をして、以下のようなコマンドを実行してみたりはしましたが、こちらについてはそのサーバにアクセスできるユーザの一覧が出るだけのものでした。
「cat /etc/passwd|sed -e 's/:.*//g'」
他、現在引き続き調査中になります。

補足情報(FW/ツールのバージョンなど)

PHP:5.4.16
apache:2.4.6

追記(2023/5/11 10:30)

そもそもそのサーバからmysql接続ができるのかの確認を試みました。

mysql -h ホスト名 -u ユーザ名 -p

現行のサーバでうまく接続できることを確認したのち、移設先のサーバで同様のことを行ってみたところ、mysqlコマンドがありませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2023/05/11 01:39

ごめんなさい、具体的にどの部分が質問なのでしょうか? エラーがでたけどつながるようになったと読めるのですが・・・
JanTh1989

2023/05/11 02:15 編集

アクセスエラーは解消したが、ユーザ認証が通らない、という内容でした。 現行サーバと同一のユーザ名、パスワードでPDOを実行しているのにどうしてだ?といったものです。 分かりづらくて申し訳ありません。
AbeTakashi

2023/05/11 02:25

MySQLでユーザを定義する際にはホストも合わせて設定するのが通例ですが、その制限に引っかかってるだけじゃないでしょうか? MySQLのroot権限で新しい"ユーザ名@ホスト名"を追加する必要はないでしょうか? ユーザに関する情報をご確認いただき、それでも問題点が分からない場合は質問文にユーザ情報やホストに関する情報を追加されるといいかと思います。
guest

回答1

0

ベストアンサー

'XXXXXXr'@'YYYYYYYY'

rootでログインして上記ユーザーを作成すれば良いと思います

SQL

1CREATE USER 'XXXXXXr'@'YYYYYYYY' IDENTIFIED BY 'password'; 2GRANT ALL PRIVILEGES ON * . * TO 'XXXXXXr'@'YYYYYYYY' 3FLUSH PRIVILEGES;

上記rootレベルのアクセス権になるので、必要に応じてレベルを下げてください

投稿2023/05/11 02:21

編集2023/05/11 02:32
yambejp

総合スコア114987

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JanTh1989

2023/05/11 05:33

ご回答ありがとうございます。 おっしゃる通りでした。 DB側のユーザ管理の知識が不足していました。 ユーザを追加しましたところ、正常に表示がされました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問