はじめに
2024年7月現在、ハッカー集団がKADOKAWAに対してランサムウェアによる攻撃を行ったというニュースが印象に残っているかと思います。
ユーザーのデータといった情報を保存しておくデータベースの権限管理はとても重要です。
そこで、「最低限知っておくべきデータベースの権限管理」というタイトルで、ぜひ知っておいて損はないデータベースの権限管理についての記事を書くこととしました。設定を見直す良い機会にしてもらえれば幸いです。
データベースの権限管理の基本
データベースの権限管理は、適切なアクセス制御を通じて、データの安全性を確保するために重要です。
以下では、MySQLを例に、最低限知っておくべき権限管理の基本と具体的な設定方法について解説します。
1. ユーザー作成と基本権限の付与
データベースにアクセスするユーザーを作成し、必要な権限を付与する基本的な方法です。
ユーザーの作成
まず、新しいユーザーを作成します。
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'secure_password';
このコマンドは、new_user
という名前のユーザーを作成し、localhost
からの接続に対してsecure_password
をパスワードとして設定します。
基本権限の付与
新しく作成したユーザーに、特定のデータベースへのアクセス権限を付与します。
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'new_user'@'localhost';
このコマンドは、new_user
に対してdatabase_name
内の全てのテーブルに対するSELECT
、INSERT
、UPDATE
、DELETE
権限を付与します。
2. 特定テーブルへの権限の付与
ユーザーに対して、特定のテーブルだけにアクセス権限を付与する方法です。
特定テーブルの権限付与
GRANT SELECT ON database_name.specific_table TO 'new_user'@'localhost';
このコマンドは、new_user
に対してdatabase_name
内のspecific_table
に対するSELECT
権限を付与します。
3. 読み取り権限の付与
不要なアクセスや誤操作を防ぐ一例として、ここでは読み取り専用のユーザー作成についてのコマンドを載せています
例: 読み取り専用ユーザーの作成
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'readonly_password';
GRANT SELECT ON database_name.* TO 'readonly_user'@'localhost';
このコマンドは、readonly_user
という名前のユーザーを作成し、database_name
内の全てのテーブルに対するSELECT
権限のみを付与します。
4. すべての権限の付与
ここでは管理者ユーザーとして、すべての権限を付与するというコマンドを載せていますが、コマンドを入力する際には特に気をつけてください。
管理者ユーザーの作成
CREATE USER 'admin_user'@'localhost' IDENTIFIED BY 'admin_password';
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
このコマンドは、admin_user
という名前のユーザーを作成し、全てのデータベースとテーブルに対する全ての権限を付与します。権限を付与する際には気をつけてください。
5. 接続の許可設定
特定のホストからの接続のみを許可する設定です。
特定ホストからの接続制限
CREATE USER 'remote_user'@'192.168.1.100' IDENTIFIED BY 'remote_password';
GRANT ALL PRIVILEGES ON database_name.* TO 'remote_user'@'192.168.1.100';
このコマンドは、remote_user
という名前のユーザーを192.168.1.100
というIPアドレスからの接続に対して作成し、database_name
内の全てのテーブルに対する全ての権限を付与します。
6. 権限の確認と取り消し
付与した権限を確認し、不要になった権限を取り消す方法です。
権限の確認
SHOW GRANTS FOR 'new_user'@'localhost';
このコマンドは、new_user
に付与されている全ての権限を表示します。
権限の取り消し
REVOKE INSERT, UPDATE ON database_name.specific_table FROM 'new_user'@'localhost';
このコマンドは、new_user
からdatabase_name
内のspecific_table
に対するINSERT
とUPDATE
権限を取り消します。
まとめ
データベースの権限管理は、データの安全性を保つために欠かせない重要な作業です。最低限知っておくべき権限管理の基本を押さえることで、不適切なアクセスを防ぎ、データの安全性を保つことができます。
ぜひ、この記事をお読みの皆さん!
定期的に権限設定を見直し、最適な権限管理を心がけることにこの記事がつながれば幸いです!