このセクションでは、実行中の MySQL Cluster に適用される MySQL 標準セキュリティー手順について説明します。
一般に、MySQL をセキュアに実行するための標準手順は、MySQL Cluster の一部として実行している MySQL サーバーにも適用されます。なによりもまず、常に MySQL サーバーを mysql
システムユーザーとして実行するようにしてください。これは、標準 (非クラスタ) 環境で実行している MySQL と違いはありません。mysql
システムアカウントは、一意かつ明確に定義されるべきです。幸運にも、これは新しい MySQL インストールのデフォルトの動作です。次に示すようなシステムコマンドを使用すると、mysqld プロセスがシステムユーザー mysql
として実行されていることを確認できます。
shell> ps aux | grep mysql
root 10467 0.0 0.1 3616 1380 pts/3 S 11:53 0:00 \
/bin/sh ./mysqld_safe --ndbcluster --ndb-connectstring=localhost:1186
mysql 10512 0.2 2.5 58528 26636 pts/3 Sl 11:53 0:00 \
/usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/var --user=mysql --ndbcluster \
--ndb-connectstring=localhost:1186 --pid-file=/usr/local/mysql/var/mothra.pid \
--log-error=/usr/local/mysql/var/mothra.err
jon 10579 0.0 0.0 2736 688 pts/0 S+ 11:54 0:00 grep mysql
mysqld プロセスが mysql
以外のユーザーとして実行されている場合は、それをすぐにシャットダウンしてから、mysql
ユーザーとして再起動するようにしてください。このユーザーがシステム上に存在しない場合は、mysql
ユーザーアカウントを作成して、このユーザーを mysql
ユーザーグループに属するようにしてください。この場合、このシステム上の (mysqld の --datadir
オプションを使用して設定された) MySQL データディレクトリが mysql
ユーザーによって所有されていること、および SQL ノードの my.cnf
ファイルの [mysqld]
セクションに user=mysql
が含まれていることも確認するようにしてください。また、コマンド行で --user=mysql
を付けて MySQL サーバープロセスを起動できますが、コマンド行オプションを使用することを忘れたために、意図せずに mysqld が別のユーザーとして実行されている可能性もあるため、my.cnf
オプションを使用することをお勧めします。mysqld_safe 起動スクリプトを使用すると、MySQL が強制的に mysql
ユーザーとして実行されます。
絶対に mysqld をシステムの root ユーザーとして実行しないでください。これを行うと、システム上の任意のファイルが MySQL によって読み取られる可能性があるため、攻撃者によって MySQL が危険にさらされます。
前のセクションで説明したように (セクション18.5.11.2「MySQL Cluster と MySQL 権限」を参照してください)、常に、MySQL サーバーを実行したらすぐに、root パスワードを設定するようにしてください。また、デフォルトでインストールされている匿名ユーザーアカウントを削除するようにしてください。次のステートメントを使用すると、これらのタスクを実現できます。
shell> mysql -u root
mysql> UPDATE mysql.user
-> SET Password=PASSWORD('secure_password')
-> WHERE User='root';
mysql> DELETE FROM mysql.user
-> WHERE User='';
mysql> FLUSH PRIVILEGES;
DELETE
ステートメントを実行する際は、WHERE
句を省略しないように注意してください。そうしないと、すべての MySQL ユーザーが削除される危険性があります。mysql.user
テーブルを変更したら、その変更が即座に有効になるように、すぐに FLUSH PRIVILEGES
ステートメントを実行してください。FLUSH PRIVILEGES
を実行しなければ、次回サーバーを再起動するまで、変更が有効になりません。
ndb_show_tables、ndb_desc、ndb_select_all などの多くの MySQL Cluster ユーティリティーは、認証なしでも動作し、テーブル名、スキーマ、およびデータを表示できます。デフォルトで、これらは Unix スタイルのシステムにアクセス権 wxr-xr-x
(755) でインストールされます。これは、mysql/bin
ディレクトリにアクセスできる任意のユーザーが実行できることを意味します。
これらのユーティリティーについての詳細は、セクション18.4「MySQL Cluster プログラム」を参照してください。