MySQL のセキュリティ
MySQLサーバに接続するときは、パスワードを使用すべきだ。パスワード以外の全ての情報はテキストで転送されるので、覗き見される恐れがある。
より安全にしたい場合、 ssh (http://www.cs.hut.fi/ssh)
をインストールする。これを使用すれば、MySQL サーバーと MySQL クライアント間の TCP/IP
コネクションは全て暗号化される。
MySQL システムを安全にするための注意点
- 全ての MySQL ユーザにパスワードを使用する
- mysqld を実行している Unix ユーザだけが読み込み/書き込み可能
- process 特権を全てのユーザに与えない(この許可がある人は誰でも mysqladmin processlist コマンドで実行されているクエリーの中身を見ることができる)。
- file を全てのユーザに与えない(ユーザがこの特権を持つ場合、mysqld デーモンを実行している Unix ユーザーの権限で、ファイルシステム内のどこにでもファイルを書き込むことができる)。
- DNS を信用しない場合、特権テーブル内にはホスト名の代わりに IP を使用すべきだ。mysqld への --secure オプションは原理上はホスト名を安全にする。どんな場合でも、ホスト名へのワイルドカードの使用については、注意深くすべきだ。
MySQLの安全な起動法
MySQL デーモンを Unix の root ユーザーで実行しないように。 mysqld は任意のユーザで実行できる。MySQL を動作させるユーザーは以下のようにするといい。
- login を許可しない (shell や passwd を与えない)
- wheel や root group にしない
- 全く新しく作成した group に属する
MySQLサーバの起動
# mysqld -u mysqluser [オプション] &
※mysqld を 他の Unix ユーザーで起動したとしても、 MySQL の user テーブルの root ユーザーの名前を変更する必要はありません。
セキュリティに影響するmysqlオプション
- --secure
- gethostbyname() から返される ip がオリジナルのホスト名に戻せるかどうかをチェックする。これは、外の誰かが他のホストを真似てアクセスを得ることを難しくなる。
- --skip-grant-tables
- 特権システムを全く使用しない。これは全員に全てのデータベースへの 完全なアクセス を与える。
- --skip-name-resolve
- ホスト名を解析しない。特権テーブル中の全ての Host項目は IP 番号か localhost でなければならない。
- --skip-networking
- ネットワーク (TCP/IP) 経由の接続を許可しない。mysqld への全ての接続は、 Unix ソケットで行われる。