2026年5月19日
2026年5月19日
MySQLのユーザー権限を設定する方法(GRANT/REVOKE)
はじめに
MySQLデータベース管理において、ユーザーが特定の権限を持つことが重要です。適切なアクセス制御はシステム全体のセキュリティを確保し、管理者は重要な情報を保護することができます。この記事では、GRANTとREVOKEコマンドを使用してユーザーの権限を設定する方法について説明します。
症状・背景
MySQLユーザーに適切なアクセス制御が必要になる主な場面:
- ユーザーが特定のデータベースやテーブルに対して読み取り専用アクセスを持つべき場合
- 新しいユーザーアカウントを作成し、そのアカウントに必要な権限を与える必要がある場合
- 既存のユーザーの権限を削減または変更する必要がある場合
- システムのセキュリティポリシーにより特定のアクセス権限が必要となる場合
手順・設定方法
ステップ1: ユーザーを作成し、基本的なアクセス権限を付与する
# 新しいユーザーを作成します。'username'はユーザー名、'password'はパスワードです。
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
# 新しく作成したユーザーに特定のデータベースへの読み取り専用アクセスを付与します。
GRANT SELECT ON database_name.* TO 'username'@'localhost';
ステップ2: より詳細な権限設定とリモート接続許可
# 新しいユーザーに特定のデータベースへのフルアクセス(SELECT, INSERT, UPDATE, DELETE)を付与します。
GRANT SELECT,INSERT,UPDATE,DELETE ON database_name.* TO 'username'@'localhost';
# ユーザーがリモートマシンから接続できるように許可します。
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'%';
ステップ3: 特定のテーブルに対する制限付きアクセスを設定
# 新しいユーザーに特定のデータベース内の特定のテーブルへの読み取り専用アクセスを付与します。
GRANT SELECT ON database_name.table_name TO 'username'@'localhost';
# ユーザーが指定されたテーブルに対するINSERTとDELETE権限を持つように設定します。
GRANT INSERT, DELETE ON database_name.table_name TO 'username'@'%';
ステップ4: 権限を削除または変更する
# 特定のユーザーの全権限を取り消します。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'username'@'localhost';
# より具体的な権限の取り消し(例:SELECT権限)
REVOKE SELECT ON database_name.* FROM 'username'@'%';
注意事項
- 実際のユーザー名とパスワードを設定する際には、適切にマネージメントツールやセキュリティポリシーに従ってください。
- GRANTとREVOKEを使用する前に、既存のユーザー権限を確認することをお勧めします。これにより、意図しないアクセスが許可されることを防ぐことができます。
- セキュリティ上の注意点: リモートマシンから接続できるようにするには「%」を使用しますが、これは最も安全な設定ではありません。特定のIPアドレスまたはホスト名に制限を設けることを強く推奨します。
- パフォーマンス/運用上の注意: ユーザー権限の管理は頻繁に行われるべきではありません。適切な初期設定を行い、その後変更が少ないようにすることが重要です。
まとめ
1. GRANTコマンドを使用して新しいユーザーに必要なアクセス権を付与できます。
2. REVOKEコマンドを使用すると、既存のユーザーから不要になったアクセス権を取り消すことができます。
3. '%*'と'@localhost' の違いを理解し、適切な接続設定を選択します。
4. ユーザーに必要以上の権限を与えないように注意してください。最小限の権限で運用することがセキュリティ上重要です。
5. 定期的にユーザー権限とアクセス制御リストをレビューし、適切なセキュリティポリシーに従って更新を行います。
関連記事: