SQL Serverでは、データベースのセキュリティを確保するために「権限管理」が重要になります。権限管理とは、データベースのオブジェクト(テーブル、ビュー、ストアドプロシージャなど)に対するアクセスを適切に制限する仕組みのことです。
この記事では、SQL Serverで権限管理を行うための3つの主要なコマンド GRANT、REVOKE、DENY の違いと使い方について詳しく解説します。また、実際にSQLを実行しながら理解を深められるよう、演習問題も用意しました。
SQL Serverの権限管理とは?
SQL Serverでは、ユーザーやロールごとにアクセス制御を設定できます。
適切な権限を付与することで、不正なデータアクセスや改ざんを防ぎ、データの機密性と整合性を保つことができます。
権限の種類
SQL Serverの権限には、以下の2つのレベルがあります。
- サーバーレベルの権限
- ログイン管理、サーバー設定変更、データベース作成などを制御。
- 例: ALTER SERVER ROLE、CREATE ANY DATABASE など。
- データベースレベルの権限
- テーブルやビューなどのオブジェクトごとの権限を制御。
- 例: SELECT、INSERT、UPDATE、DELETE など。
SQL Serverでは、これらの権限をGRANT(許可)、REVOKE(取り消し)、DENY(拒否)という3つのコマンドで管理します。
GRANT(権限の付与)
GRANT は、ユーザーまたはロールに特定の権限を付与するコマンドです。
構文
GRANT 権限名 ON オブジェクト名 TO ユーザー名;
例: ユーザーにSELECT権限を付与
下記コマンドは、user1 に Employees テーブルの SELECT 権限を付与します。
GRANT SELECT ON Employees TO user1;
複数の権限を付与する場合
GRANT INSERT, UPDATE ON Employees TO user1;
すべてのユーザーに権限を付与
PUBLIC はすべてのデータベースユーザーを対象にします。
GRANT SELECT ON Employees TO PUBLIC;
REVOKE(権限の取り消し)
REVOKE は、GRANT で付与した権限を取り消すコマンドです。
構文
REVOKE 権限名 ON オブジェクト名 FROM ユーザー名;
例: ユーザーからSELECT権限を取り消す
REVOKE SELECT ON Employees FROM user1;
- REVOKE は 付与した権限のみを取り消す コマンドです。
- REVOKE では 明示的に拒否(DENY)された権限は解除できない ため、DENYを解除するには DENY を REVOKE する必要があります。
DENY(権限の拒否)
DENY は、特定のユーザーまたはロールに対して強制的に権限を拒否するコマンドです。
構文
DENY 権限名 ON オブジェクト名 TO ユーザー名;
例: ユーザーに対してSELECTを拒否
DENY SELECT ON Employees TO user1;
- GRANT された権限を持っていても、DENY が適用されると権限が無効化される。
- DENY は REVOKE で解除できず、明示的に GRANT するか DENY を REVOKE する必要がある。
DENYを解除する方法
REVOKE DENY SELECT ON Employees FROM user1;
GRANT、REVOKE、DENYの違い
コマンド | 説明 |
---|---|
GRANT | 権限を付与する |
REVOKE | 付与された権限を取り消す |
DENY | 権限を強制的に拒否する |
GRANT で付与された権限は REVOKE で取り消せますが、DENY は REVOKE では解除できない点に注意が必要です。
演習問題と解答例
演習問題
- user2 に Orders テーブルの SELECT と UPDATE 権限を付与してください。
- user2 の UPDATE 権限を取り消してください。
- user2 に対して Orders テーブルの DELETE 権限を拒否してください。
- user2 に付与した DELETE 権限の拒否を解除してください。
解答例
-- 1. user2 に SELECT と UPDATE 権限を付与
GRANT SELECT, UPDATE ON Orders TO user2;
-- 2. user2 の UPDATE 権限を取り消す
REVOKE UPDATE ON Orders FROM user2;
-- 3. user2 に DELETE 権限を拒否
DENY DELETE ON Orders TO user2;
-- 4. user2 の DELETE 拒否を解除
REVOKE DENY DELETE ON Orders FROM user2;
まとめ
SQL Serverの権限管理では、GRANT、REVOKE、DENY を適切に使い分けることが重要です。
- GRANT:ユーザーに権限を付与する。
- REVOKE:GRANT で付与した権限を取り消す。
- DENY:強制的に権限を拒否し、GRANT の影響を無効化する。
実際のデータベース運用では、最小権限の原則(必要最低限の権限のみを付与する) を徹底することが、セキュリティの強化につながります。