teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

誤字の修正

2020/09/02 14:46

投稿

raccy
raccy

スコア21768

answer CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  > データベース管理のプログラムの開発で、アプリケーションのデータベース初期化時に、ユーザーアカウントも自動作成するので、configファイルに記載されているパスワードと一致しているか確認し、一致していなければパスワードを初期化するプログラムです。
8
8
 
9
- このような目的であれば、mysql.userを直接見にってパスワードを確認する事はお勧めできません。実際にそのユーザーとパスワードで接続可能であるかを確認する方法に変更することをお勧めします。
9
+ このような目的であれば、mysql.userを直接見にってパスワードを確認する事はお勧めできません。実際にそのユーザーとパスワードで接続可能であるかを確認する方法に変更することをお勧めします。
10
10
 
11
11
  お勧めできない理由は、パスワードはハッシュ化されて保存されており、そのハッシュ化方法が将来変更される可能性があるからです。実際4.1でハッシュ化の形式は変更されました。また、サーバーの設定によっては古い方法やSHA256を用いた方法になっている場合があります。つまり、今の段階でもハッシュ化形式によって分岐が必要であり、また、将来のバージョンで追加の実装が必要なってくる可能性があります。
12
12
 

2

追記

2020/09/02 14:46

投稿

raccy
raccy

スコア21768

answer CHANGED
@@ -1,3 +1,15 @@
1
1
  mysqliを使用しているのであれば、[mysqli::$server_info](https://www.php.net/manual/ja/mysqli.get-server-info.php)で取得できるようです。文字列として取得できるので、SQL発行するよりは簡単だと思われます。PDOの場合は見つかりませんでした。
2
2
 
3
- PHPでMySQLにSQLを直接発行する(所謂ORM等を使わない)プログラムを作成した実務経験は全くないので、間違っていたらすいません。PHPはあまり知らないのだけど、頑張って調べて書いてみました。
3
+ PHPでMySQLにSQLを直接発行する(所謂ORM等を使わない)プログラムを作成した実務経験は全くないので、間違っていたらすいません。PHPはあまり知らないのだけど、頑張って調べて書いてみました。
4
+
5
+ ---
6
+
7
+ > データベース管理のプログラムの開発で、アプリケーションのデータベース初期化時に、ユーザーアカウントも自動作成するので、configファイルに記載されているパスワードと一致しているか確認し、一致していなければパスワードを初期化するプログラムです。
8
+
9
+ このような目的であれば、mysql.userを直接見に言ってパスワードを確認する事はお勧めできません。実際にそのユーザーとパスワードで接続可能であるかを確認する方法に変更することをお勧めします。
10
+
11
+ お勧めできない理由は、パスワードはハッシュ化されて保存されており、そのハッシュ化方法が将来変更される可能性があるからです。実際4.1でハッシュ化の形式は変更されました。また、サーバーの設定によっては古い方法やSHA256を用いた方法になっている場合があります。つまり、今の段階でもハッシュ化形式によって分岐が必要であり、また、将来のバージョンで追加の実装が必要なってくる可能性があります。
12
+
13
+ それと比べて、MySQLサーバーへの接続方式は互換性を保つことが期待されます。ですので、実際にそのユーザー名とパスワードでサーバーへ接続すること、ついでに、読み込み書き込みデータベースへの読み込み書き込みテストを行えば確実でしょう。個人的には、PHPで全てやるのではなく、Ansible等を別タスクで実行するような仕組みにすることをお勧めします。
14
+
15
+ 最後に、どのようなデータベースでも使われるようなものにするのであれば、MariaDBへの対応は必ず求められると思います。MySQLとMariaDBは標準的な利用を想定した表面的な互換性はありますが、mysql.user等と言った管理部分の互換性は失われつつあります。そういう意味でも、互換性が維持される部分を用いた方法を取る方が、将来を見越した作りになると思われます。少なくとも、私だったらそのように作ります。

1

頑張りました。

2020/09/02 14:45

投稿

raccy
raccy

スコア21768

answer CHANGED
@@ -1,3 +1,3 @@
1
1
  mysqliを使用しているのであれば、[mysqli::$server_info](https://www.php.net/manual/ja/mysqli.get-server-info.php)で取得できるようです。文字列として取得できるので、SQL発行するよりは簡単だと思われます。PDOの場合は見つかりませんでした。
2
2
 
3
- PHPでMySQLにSQLを直接発行する(所謂ORM等を使わない)プログラムを作成した実務経験は全くないので、間違っていたらすいません。
3
+ PHPでMySQLにSQLを直接発行する(所謂ORM等を使わない)プログラムを作成した実務経験は全くないので、間違っていたらすいません。PHPはあまり知らないのだけど、頑張って調べて書いてみました。