MySQL のセキュリティ
MySQLサーバに接続するときは、パスワードを使用すべきです。パスワード以外の全ての情報はテキストで転送されるので、覗き見される恐れがあります。さらにSSHで暗号化通信すれば覗き見の心配も解消されるでしょう。
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 ソケットで行われます。