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

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

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

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PHP

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

Q&A

解決済

2回答

3358閲覧

MySqlデータベースからデータを取得する際 〜 is not allowed to connect to this MariaDB server エラーが発生する

nagomi72

総合スコア51

terminal

Terminalは、Apple社のmacOSに標準で付属しているUNIX端末エミュレータ。UNIXコマンドによってMacの操作および設定を行うことができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PHP

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

0グッド

0クリップ

投稿2019/05/11 03:31

レンタルサーバー上(xserver)にあるMySqlからデータを取得するphpプログラムを実行したところ
以下のエラーが発生しました。

SQLSTATE[HY000] [1130] Host 'sv8180.xserver.jp' is not allowed to connect to this MariaDB server

以下、実行したphpのソースとなります。

<?php try { $ini = parse_ini_file('./db.ini', FALSE); $db = new PDO('mysql:host='.$ini['host'].';dbname='.$ini['dbname'].';charset=utf8', $ini['dbusr'], $ini['dbpass']); $sql = $db->prepare('SELECT * FROM test'); $sql->execute(); } catch(PDOException $e) { die('エラーメッセージ:'.$e->getMessage()); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>dbの中身を見てみよう</title> </head> <body> <h1>testテーブルの情報</h1> <table border="1"> <tr> <th>id</th><th>name</th><th>department</th> </tr> <?php while ($row = $sql->fetch()) { ?> <tr> <td><?php print($row['id']); ?></td> <td><?php print($row['name']); ?></td> <td><?php print($row['department']); ?></td> </tr> <?php } ?> </table> </body> </html>

今回発生したエラーを解決するには、対象のMySqlのユーザーに権限を付与する必要があるようでした。
ssh -l サーバーID -I 鍵名 サーバーID.xsrv.jp -p 10022
でssh接続を行い、
mysql -h ホスト名 -u ユーザー名 -p データベース名
でMySqlにログイン。

grant all privileges on . to ユーザー名@"sv8180.xserver.jp" ;
で権限を与えようとしたところパスワードが間違えているかユーザーが存在しない旨のエラーが発生しました。
Access denied for user 'ユーザー名'@'sv8180.xserver.jp' (using password: YES)

grantコマンドではパスワードを入力する場面はそもそもなかったためユーザーがいないのかと考え、
SELECT user,host,password FROM mysql.user;
でユーザーを確認しようとしたところまたしても権限がないとのエラー。
SELECT command denied to user 'ユーザー名'@'sv8180.xserver.jp' for table 'user'

rootでログインすれば実行できると考えられるのですが、xserverではroot権限を提供していないとのことでした。

xserverに問い合わせて権限を付与してもらうしか方法はないのでしょうか。

ご教授頂ければ幸いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/05/11 04:04

んーと、多分、 PHPの動いているサーバーとMariaDBの動いているサーバーは同じなのに、 ユーザー名@sv8180.xserver.jp でアクセスしようとちていまちゅよね?
guest

回答2

0

ご質問に対する回答ではありませんが、セキュリティ上の問題に気づきましたので指摘します。

1. db.ini は外部から参照できる

Apache等でアクセス制御していれば別ですが、db.iniはPHPスクリプトと同じディレクトリにあるので、外部から閲覧可能です。すると、DBのユーザ名やパスワードが漏洩します。
レンタルサーバーですと、DBのパスワードがわかると、即悪用できてしまう場合が多いと思います。
db.iniは、外部からウェブアクセスできない場所に置くべきです。

2. クロスサイトスクリプティング脆弱性

printの箇所で htmlspecialchars関数を呼んでいないので、局所的にクロスサイトスクリプティング脆弱性があります。攻撃可能かまではわかりませんが、表示の際にはもれなく htmlspecialchars関数を呼んでおくことを強くお勧めします。そうしない、 htmlspecialcharsが必要な箇所か不要な箇所か、とてもわかりにくくなり、脆弱性の原因になるからです。

投稿2019/05/11 05:04

ockeghem

総合スコア11701

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

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

nagomi72

2019/05/13 07:37

ご教授頂きありがとうございます。 db.iniの場所を変更いたします。
guest

0

ベストアンサー

エックスサーバーでは管理画面からユーザの追加、権限付与をする必要があるみたいです。
こちらは試されてますでしょうか。
MySQLの設定 | レンタルサーバー【エックスサーバー】

投稿2019/05/11 03:39

Eggpan

総合スコア2727

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

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

nagomi72

2019/05/11 03:46

こちらは既に行っており、アクセス権所有ユーザの欄には今回select文を実行する際に使用した ユーザー名が記載されている状態となっております。
Eggpan

2019/05/11 03:50

mysql -h ホスト名 -u ユーザー名 -p データベース名 でmysqlに接続したあと SELECT * FROM test; が出来るかどうか、はどうでしょうか。 上記が問題なければ、PHPで接続する際の問題になってくると思います。
nagomi72

2019/05/11 03:57

SELECT * FROM test; 上記は実行可能でした。 PHPは初めて触るのでそこは盲点でした。 再度その視点で調査してみます。
Eggpan

2019/05/11 04:08

ssh -l サーバーID -I 鍵名 サーバーID.xsrv.jp -p 10022 で接続しているサーバがphpを設置しているサーバですかね? mysqlコマンドを実行したサーバと、phpでは動かないサーバが同じかどうか質問からは読み取れなかったので、念の為。 同じなのであれば、 mysql -h ホスト名 -u ユーザー名 -p データベース名 での接続は問題ないのですから、上記mysqlコマンドで言うところの ユーザー名@ホスト名 のユーザにはtestテーブルの参照権限はついているはずです。 mysql.userがselectできないのは sv8180.xserver.jp というDBサーバに作成されている全ユーザが見えてしまうからかと思います。
nagomi72

2019/05/11 04:19

host部分をphpを設置しているホスト名としていたのが原因でした。 host名をMySqlの設置されているサーバーのホスト名とすることでデータベースから 値を取得することができました。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問