Debian9などはMariaDBがインストールされるので、これを機にまじめに設定してみたらPerl or PHPでアクセスできないので調べてみました。
結果的には「UNIX_SOCKET Authentication Plugin」がデフォルトで有効になっているため、rootではもちろん、他のアカウントでも手順を踏まないとアクセスできないってことでしたねー。
参考)https://jyn.jp/ubuntu-16-04-mariadb-password-bug/#MariaDB
今回はUNIX_SOCKETを使用せずに通常のパスワード認証でアカウントを作成したので、コンソールよりmariadbにログインし、おもむろに下記を実行します。
ユーザー名は揃える必要があるので、Apacheの実行権限が「hogehoge」とした場合、下記のコマンドになります。
CREATE USER hogehoge@localhost IDENTIFIED BY 'passwd';
作成したアカウントに対して、unix_socketが付与されていないことを確認します。
select user,host,password,plugin from mysql.user;
+------------+-----------+-------------------------------------------+-------------+
| user | host | password | plugin |
+------------+-----------+-------------------------------------------+-------------+
| root | localhost | *FDLK+LSDKFLD+FDMFDSFDSFKDSLFKDLSFKDL+FKD | unix_socket |
| hogehoge | localhost | *dsadsdsdsdsdsadsadKSDJSIDASDLSDLSDSDSADJ | |
+------------+-----------+-------------------------------------------+-------------+
この状態だとデータベースの作成権限がないため、データベースが無いと相変わらずaccess deniedなので、データベースを作成する権限を付与します。
grant all on *.* to 'hogehoge'@'localhost';
セキュリティー上、より強固になったような気がします!(all on *.* ですけど)