MySQLではセキュリティを保持するためにユーザ毎の動作に制限がかけられます。データベースの情報が正しく安全に運用されるためには、ユーザ管理にも適正なセキュリティが施されていることが必要です。ユーザ管理からみて高いセキュリティに重要性があることは見逃せません。
MySQLを運用する際に留意しなければならいないセキュリティには、盗聴や改変、プレイバック攻撃など、サービス妨害全般に対応する必要があります。そのためにはMySQLのセキュリティガイドラインをまずは遵守することです。
具体的にはユーザに対して適切なアクセス制限を設けているか、不必要な権限を安易にユーザに設定していないか、よくユーザ毎の権限を検討してください。決してすべてのユーザにルuserテーブルのアクセス権限を与えないでください。
パスワードはセキュアな状態で取り扱いましょう。パスワードを平文で保存することなく、ハッシュ機能を使って、パスワードのリカバリを防ぐ必要があります。
サーバ全体としてもセキュアであることが要求されます。サーバに接続するユーザをrootユーザで行ったり、平文パスワードを使ったりすることも厳禁です。
その他、LOAD DATA LOCAL のセキュリティには潜在的な問題もあります。バージョンによって対処も変わってきますので、バージョンとMySQLの資料を確認するようにしてください。
ここまでは一般的なセキュリティを説明しましたが、ではその管理はどのようにMySQLで管理されているのでしょうか。
MySQLのユーザは大まかに分類するとrootユーザ、一般ユーザ、匿名ユーザになります。これらのユーザを管理しているのはMySQL内のユーザテーブルになります。それぞれのアクセス権限の情報がここに格納されています。
さて、アクセス権限システムではホストからアクセスするユーザの認証と、それぞれのユーザの挙動と権限の範囲を結びつけることが、メインの役割になります。
ユーザはSELECT(検索)、INSERT(登録)、UPDATE(更新)、DELETE(削除)などの動作をテーブル上で行います。この動作はユーザ毎に設定がされ、SELECTできるユーザとできないユーザとに分けられます。
実際のアクセス制限は単純にSELECTだけではありませんが、このようにユーザ別にその動作や役割を制限することで、運用上の安全を確保しています。
一見、万能に思えるアクセス権限システムですが、実行できないものもあります。例えば特定ユーザを明示的にアクセス拒否することはできませんし、パスワードに関しては特定のオブジェクトと関連付けることは不可能です。
前述した通り、MySQL のユーザ情報はユーザテーブルに格納されています。アカウントにはユーザ名とパスワードが紐づけられており、アクセスできるクライアントホストも定義されています。
新しいアカウントを設定したり、既存のアカウントを削除したりするには、rootとしてサーバに接続しなければなりません。初期の時点ではrootユーザはすべての権限を有しています。
これらのユーザーアカウントの管理は、アカウントを作成または削除するためのCREATE USER や GRANT 、DROP USERなどのステートメントが利用されます。パスワードの割り当ても同様にrootユーザによって管理されます。
ユーザーアカウントの管理は非常に重要な役割ですから、セキュア(安全)に運用しなければなりません。パスワードやホストへの接続もセキュアに行われなければなりませんし、接続に関してはSSL(Secure Sockets Layer)の使用が推奨されます。SSLは情報を暗号化して伝えるので、経路からの流出を防ぐ点でも重要な技術であることは言うまでもありません。
ユーザーアカウントの設定次第で、ホストやデータベースの安全性が大きく変わってきます。MySQLやサーバを扱う管理者は、ホストや情報を危険にさらさせないように万全の管理を行ってください。また、バージョンによっては脆弱なところもありますので、最新の情報にも気を配ることが大切です。
製品・サービスに関するご質問、お見積もり、お問い合わせなど、お気軽にご連絡ください。