SQL事始め | |||||||||||||||||||||||||||
RevはTCP/IPによってUnix ServerのMySQLにアクセスしてコントロールすることも、CGIを通じてMySQLをコントロールすることもできる。 ISPが提供するほとんどのServerにはおまけでMySQLがついているが、Revが直接MySQLをコントロールするには、そのMySQLがSSHによるリモートによるアクセスを許可している必要がある。 ここでは、CGIを使わずにRevが直接、外部サーバーのMySQLにアクセスする方法を説明する。
|
|||||||||||||||||||||||||||
手順 | |||||||||||||||||||||||||||
まずSSHでMySQLにアクセスできるようにする必要がある。
の準備が必要。次にSSHやphpMyAdminなどでMySQL上にテーブルやフィールドを設定する。 以下、この手順に沿って解説する。 |
|||||||||||||||||||||||||||
サーバーの条件 |
|||||||||||||||||||||||||||
Revから直接、レンタルサーバー上のMySQLを動かすにはそのサーバーが次の条件を満たしている必要がある。
そして、そのためには、ServerはVDSである必要がある。(VDS, Virtual Dedicated Serverについての一般的な説明はhttp://ezinearticles.com/?Dedicated-/-Virtual-Dedicated-Servers-and-Its-Benefits!&id=67818、もっと技術的な説明はhttp://www.hardhathosting.com/をご覧ください。)
|
|||||||||||||||||||||||||||
MySQLのバージョン | |||||||||||||||||||||||||||
MySQLは、4.0以前、4.1以降、5.1以降で性能が違うだけでなく、上位互換性も完全ではない。さらに、日本語の扱いも異なる。海外のレンタルサーバーで最新バージョンのMySQLを使っているところは少なく、一方、日本のMySQLのマニュアル本はMySQLの最新バージョン、しかもlocalhostによるオペレーションを前提に書かれているものがほとんどである。その結果、同じことをやっているのに動かない、という事態になる。したがって、自分がMySQLのどのバージョンを使っているのかは注意を要する。
などの違いがあるので、バージョンの違いには注意が必要 (これを知らなかったので一週間ぐらい悩んだ。) MySQL日本語メーリングリストの過去ログはhttp://www.mysql.gr.jp/mysqlml/mysql/。 |
|||||||||||||||||||||||||||
最初に何を使ってMySQLに接続するか | |||||||||||||||||||||||||||
もちろん、最終的にはRevから接続するわけですが、あらかじめMySQLにテーブルやフィールドの設定をしておかないとRevでデータを書き込むことができない。 phpMyAdminは多くのサーバーにインストールされているもので、テーブルやフィールドの作成やデータの閲覧までできる便利なものである。
|
|||||||||||||||||||||||||||
MySQLにアクセスできない | |||||||||||||||||||||||||||
skip-networking rootでMySQL Control Centerは使えない Access Hosts
|
|||||||||||||||||||||||||||
MySQLのユーザー設定 | |||||||||||||||||||||||||||
MySQLのユーザーと、そのMySQLが動作しているサーバーのユーザーはまったく別のものである。
最初は、MySQLのユーザーはrootと匿名ユーザーしかないので、SSHなどでrootでMySQLにログインするしかない。MySQLにログインしたらgrantコマンドで新規ユーザーを作り、ログアウトして、grantで作った新規ユーザーで再度MySQLにログインする。そして普通に使う。
|
|||||||||||||||||||||||||||
初めてのログイン | |||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
rootのパスワードの設定と匿名ユーザーの削除 | |||||||||||||||||||||||||||
rootのパスワードの設定は次のコマンドで行う。
匿名ユーザーの削除は次のコマンドで行う。
|
|||||||||||||||||||||||||||
新規ユーザーの作成 | |||||||||||||||||||||||||||
ユーザーを作るためにはrootでMySQLにログインして次のコマンドを実行する。
userNameは新規のユーザー名、newPasswordはそのユーザー用のパスワードである。all privileges on *.* によって、すべてのデータベースにアクセスでき、データの作成、変更、削除まで何でもできるスーパーユーザーが誕生する。 よく原理がわからないので、私の場合、次のコマンドも実行してユーザーをもうひとつ作った。
このようにして作った、userName@%とuserName@localhostというユーザーはまったく別個のものである。すなわち、userNameではじまる名前のユーザーが二つ存在する。%の方はどのIPからでもアクセスできるユーザーである。 「@以下がないユーザー名を登録した場合、MySQL のデフォルト状態では、localhost からアクセスすると、匿名ユーザとして評価されてしまいます」、とMySQLのメーリングリストに書かれていた。
|
|||||||||||||||||||||||||||
その他のユーザー権限の設定 | |||||||||||||||||||||||||||
上記の場合、ykaccというデータベースのproテーブルのpriceというカラムが閲覧できるtestユーザーを作っている。 このようにして作った特権はphpMyAdminを見ると次のように記録されていることがわかる。
MySQLデータベースのcolumns_privテーブル
『USAGEという権限は「何も権限がない」という意味で、ユーザーのエントリがmysql.userテーブルにあって、権限が何も許可されていない場合に表示される権限です。』とMySQL徹底入門第二版に書かれているが、要するにユーザー登録がされている、という意味。
解説によっては上記コマンドを実行した後、mysql> FLUSH PRIVILEGES;をしなければその変更は反映されない、とあるがGRANT、REVOKE、SET PASSWORDを行った場合、FLUSH...が自動的に実行される。
+-----------+-------+-------------------------------------------+ |
|||||||||||||||||||||||||||
接続の承認 | |||||||||||||||||||||||||||
MySQLサーバーに接続すると、まずサーバー接続の許可判定が行われる。 身元の確認は、 user テーブルのスコープフィールド(Host,
User, Password) を使用して行われる。
144.155.166.somewhere.com というホスト名で接続しようとする攻撃に対し、MySQL は数字やドットで始まるホスト名を拒否している。もし 1.2.foo.com のような名前のホストを持っている場合、許可テーブルの Hostには絶対にマッチしない。 IPアドレスのみ、IP のワイルドカードにマッチする事になる。
|
|||||||||||||||||||||||||||
MySQLが動いているかどうかshellで確認する | |||||||||||||||||||||||||||
psコマンドの場合、 などと返ってくる。
|
|||||||||||||||||||||||||||
MySQLをリスタートする | |||||||||||||||||||||||||||
これは自分が使っているサーバーの設定。
|
|||||||||||||||||||||||||||
MySQLの基本的なコマンド1 | |||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
MySQLの基本的なコマンド2 | |||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
キャラクタセットとCollationの関係 | |||||||||||||||||||||||||||
バージョン4.1からはCollationという属性が各テーブルやカラムに付属する。
などと、キャラクタセットの設定を見ることができる。 上記のカラム`name` をphpMyAdminで見ると、Collationに勝手に"utf8_general_ci"が設定されていることがわかる。 このテストにおいて、カラム`name`のCollationである"utf8_general_ci"を"latin1_general_ci"に変更して、SSHのshow create table t \Gで見るとどうなるかというと、
となり、キャラクタセットをLatin1にしたのと同じ結果になっていることがわかる。 |
|||||||||||||||||||||||||||
Default options | |||||||||||||||||||||||||||
Default options are read from the following files in the given order: /etc/my.cnf /var/lib/mysql/my.cnf ~/.my.cnf The following groups are read: mysql client The following options may be given as the first argument: --print-defaults Print the program argument list and exit --no-defaults Don't read default options from any options file --defaults-file=# Only read default options from the given file # --defaults-extra-file=# Read this file after the global files are read Possible variables for option --set-variable (-O) are: ------------------------------- [safe_mysqld] -------------------------------
[mysqld_safe] [mysqldump] [myisamchk]
|
|||||||||||||||||||||||||||
... to db: 'users' user: 'josh' See 項4.10.1. 「エラーログ」 。 以下が発生したと考えられます。 クライアントプログラムが終了前に mysql_close() を呼び出さなかった。 クライアントが何の要求もせずに、 wait_timeout または interactive_timeout より多くの時間スリープ状態であった。 See 項4.6.8.4. 「 SHOW VARIABLES 」 。 クライアントプログラムが、転送中に突然終了した。 ... 以下の場合、サーバ変数 Aborted_connects の値が増えます。 接続パケットに正しい情報が含まれていない場合 ユーザにデータベースに接続する権限がない場合 ユーザが間違ったパスワードを使用した場合 接続パケットの取得に、 connect_timeout で指定されている秒数より多く要した場合 See 項4.6.8.4. 「 SHOW VARIABLES 」 。 上記のことは、不正ユーザがデータベースに侵入しようとしている可能性を示している。 | |||||||||||||||||||||||||||
その他 | |||||||||||||||||||||||||||
|