SQL Serverのデータベースのセキュリティで権限管理 – GRANT、REVOKE、DENYの使い方

SQL Serverでは、データベースのセキュリティを確保するために「権限管理」が重要になります。権限管理とは、データベースのオブジェクト(テーブル、ビュー、ストアドプロシージャなど)に対するアクセスを適切に制限する仕組みのことです。

この記事では、SQL Serverで権限管理を行うための3つの主要なコマンド GRANT、REVOKE、DENY の違いと使い方について詳しく解説します。また、実際にSQLを実行しながら理解を深められるよう、演習問題も用意しました。


SQL Serverの権限管理とは?

SQL Serverでは、ユーザーやロールごとにアクセス制御を設定できます。

適切な権限を付与することで、不正なデータアクセスや改ざんを防ぎ、データの機密性と整合性を保つことができます。

権限の種類

SQL Serverの権限には、以下の2つのレベルがあります。

  1. サーバーレベルの権限
    • ログイン管理、サーバー設定変更、データベース作成などを制御。
    • 例: ALTER SERVER ROLE、CREATE ANY DATABASE など。
  2. データベースレベルの権限
    • テーブルやビューなどのオブジェクトごとの権限を制御。
    • 例: 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;
DENYのポイント
  • 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 では解除できない点に注意が必要です。


演習問題と解答例

演習問題

  1. user2 に Orders テーブルの SELECT と UPDATE 権限を付与してください。
  2. user2 の UPDATE 権限を取り消してください。
  3. user2 に対して Orders テーブルの DELETE 権限を拒否してください。
  4. 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 の影響を無効化する。

実際のデータベース運用では、最小権限の原則(必要最低限の権限のみを付与する) を徹底することが、セキュリティの強化につながります。