2015年6月25日木曜日

MYSQL HTTP PLUGIN確認 の補足

MySQL HTTP Plugin確認 | variable.jp [データベース,パフォーマンス,運用] を写経して失敗したので補足メモ。

2. my.cnfをマニュアルを見て編集
myhttp_default_mysql_user_name = http_sql_user
myhttp_default_mysql_user_passwd = sql_secret
myhttp_default_mysql_user_host = 127.0.0.1

* myhttp_default_mysql_user_nameは BASIC認証に成功した後に myhttpプラグインからMySQLに接続しに行くときに使うユーザー名。暗黙のデフォルトは "root"
* myhttp_default_mysql_user_passwdは BASIC認証に成功した後に myhttpプラグインからMySQLに接続しに行くときに使うパスワード。暗黙のデフォルトは ""(空文字列)

ということでこの2つは、`3. myhttpデータベースを検証用に作成しテスト用テーブルとユーザーを作成` の後ろの方でCREATE USERしたユーザー/パスワードと合わせる。

このホスト部分はcurlで指定したホスト部分に書き換わるので、↑の記事の通りcurl --url 192.168.56.x:8080 ..ならそのまま通るけど、curl --url 127.0.0.1:8080にした場合はhttp_sql_user@'192.168.56.0/255.255.255.0'に対してhttp_sql_user@127.0.0.1でログインしようとしちゃうので、curlが通らなくなる。罠い。


しかもタチの悪いことに、

$ curl --user basic_auth_user:basic_auth_passwd --url "http://127.0.0.1:8080/sql/myhttp/SELECT+%2A+FROM+simple"

$ tail data/error.log
..
2015-06-25T07:44:56.207437Z 2 [ERROR] Invalid user

HTTPレスポンス何か返せよ! エラーメッセージ雑だよ! せめて自分がmyhttpプラグインだって名乗れよ!

あと、

* myhttp_default_mysql_user_hostは BASIC認証に成功した後に myhttpプラグインからMySQLに接続しに行くときの…ホスト…。

  * ってことは、myhttpプラグインがインストールされているマシンじゃないMySQLにもつなぎにいけるってことか…この変態め…。
  * と思ったけど、127.0.0.1以外の何かに書き換えてもダメ。どうやら、curlでリクエストしたホスト名に置き換えているぽい。

$ curl -s --user basic_auth_user:basic_auth_passwd --url "http://172.17.0.2:8080/sql/myhttp/SELECT+%2A+FROM+simple" | jq .

Breakpoint 1, my_da_sql_init_security_ctx (thd=0x7fdf80005780, user=0x2eeb148 "http_sql_user",
    host=0x7fdf800055a8 "172.17.0.2", db=0x7fdf80005668 "myhttp")
    at /export/home/pb2/build/sb_0-13293843-1411506406.69/mysql-5.7.5-labs-http/sql/sql_da_sql.cc:146
146         char * user_copy= my_strdup(key_memory_Security_context, user, MYF(MY_WME));


$ curl -s --user basic_auth_user:basic_auth_passwd --url "http://127.0.0.1:8080/sql/myhttp/SELECT+%2A+FROM+simple" | jq .

Breakpoint 1, my_da_sql_init_security_ctx (thd=0x7fdf780040e0, user=0x2eeb148 "http_sql_user",
    host=0x7fdf7800e378 "127.0.0.1", db=0x7fdf78001988 "myhttp")
    at /export/home/pb2/build/sb_0-13293843-1411506406.69/mysql-5.7.5-labs-http/sql/sql_da_sql.cc:146
146         char * user_copy= my_strdup(key_memory_Security_context, user, MYF(MY_WME));

一応ホスト名とか受け取れるけど、ロードバランサーとかの下に入れるとどういう動きするんでしょうねこれ。。


curl --userで指定するBASIC認証部分のユーザー名とパスワードはそれぞれ

* myhttp_basic_auth_user_name .. 暗黙のデフォルト "basic_auth_user"
* myhttp_basic_auth_user_passwd .. 暗黙のデフォルト "basic_auth_passwd"


地雷ヤーズのためのメモでした。

0 件のコメント :

コメントを投稿