すべての SQL Server セキュリティ保護可能なリソースには、プリンシパルに付与できるアクセス許可が関連付けられています。 このトピックでは、次の情報を提供します。
権限の命名規則
次に、アクセス許可の名前付けに従う一般的な慣例について説明します。
コントロール
権限付与対象ユーザーに所有権に似た機能を付与します。 権限付与対象ユーザーは、セキュリティ保護可能なリソースに対して定義されているすべてのアクセス許可を実質的に持ちます。 CONTROL が付与されている主体は、セキュリティオブジェクトへのアクセス許可を付与することもできます。 SQL Server セキュリティ モデルは階層構造であるため、特定のスコープの CONTROL には、そのスコープ内のすべてのセキュリティ保護可能なリソースに対する CONTROL が暗黙的に含まれます。 たとえば、データベースに対する CONTROL は、データベースに対するすべての権限、データベース内のすべてのアセンブリに対するすべての権限、データベース内のすべてのスキーマに対するすべての権限、およびデータベース内のすべてのスキーマ内のオブジェクトに対するすべての権限を意味します。
変更する
特定のセキュリティ保護対象の所有権を除くプロパティを変更する機能を付与します。 スコープに対して付与されると、ALTER は、そのスコープ内に含まれるセキュリティ保護可能なリソースを変更、作成、または削除する機能も付与します。 たとえば、スキーマに対する ALTER 権限には、スキーマからオブジェクトを作成、変更、および削除する機能が含まれます。
ALTER ANY <Server Securable>、Server Securable は任意のサーバーで利用可能なセキュリティ保護対象です。
サーバー セキュリティ保護可能なサーバーの個々のインスタンスを作成、変更、または削除する機能を付与します。 たとえば、ALTER ANY LOGIN は、インスタンス内のログインを作成、変更、または削除する機能を提供します。
ALTER ANY <データベース内の保護可能なオブジェクト>。データベース内の保護可能なオブジェクトは、データベースレベルで任意の保護対象となり得ます。
データベース保護対象リソースの個々のインスタンスを作成、変更、または削除することを可能にします。 たとえば、ALTER ANY SCHEMA は、データベース内のスキーマを作成、変更、または削除する機能を提供します。
責任を引き受ける
権限付与対象ユーザーが、付与されているセキュリティ保護可能なリソースの所有権を取得できるようにします。
IMPERSONATE <ログイン>
権限付与対象ユーザーがログインを偽装できるようにします。
ユーザーになりすます <ユーザー>
権限付与することで対象ユーザーが他のユーザーになりすますことが可能になります。
CREATE <Server Securable>
権限付与対象ユーザーに 、サーバー セキュリティ保護可能なリソースを作成する権限を付与します。
CREATE <Database Securable>
権限付与対象ユーザーにデータベース保護可能項目を作成する権限を付与します。
CREATE <Schema に含まれるセキュリティ保護可能なリソース>
スキーマに含まれるセキュリティ対象のリソースを作成する機能を付与します。 ただし、特定のスキーマ内でセキュラブルを作成するには、スキーマに対する ALTER 権限が必要です。
ビューの定義
権限付与対象ユーザーがメタデータにアクセスできるようにします。
参考文献
テーブルを参照する FOREIGN KEY 制約を作成するには、テーブルに対する REFERENCES 権限が必要です。
オブジェクトを参照する
WITH SCHEMABINDING
句を使用して FUNCTION または VIEW を作成するには、オブジェクトに対する REFERENCES 権限が必要です。
SQL Server のアクセス許可のグラフ
pdf 形式のすべてのデータベース エンジンのアクセス許可のポスター サイズのグラフについては、 https://github.com/microsoft/sql-server-samples/blob/master/samples/features/security/permissions-posters/Microsoft_SQL_Server_2017_and_Azure_SQL_Database_permissions_infographic.pdfを参照してください。
特定のセキュリティ保護可能なリソースに適用されるアクセス許可
次の表に、アクセス許可の主要なクラスと、それらが適用されるセキュリティ保護可能なリソースの種類を示します。
権限 | 対象 |
---|---|
選択する | シノニム テーブルと列 テーブル値関数、Transact-SQL および共通言語ランタイム (CLR)、および列 ビューと列 |
変更の追跡を表示する | 表 スキーマ |
更新 | シノニム テーブルと列 ビューと列 シーケンス オブジェクト |
参考文献 | スカラー関数と集計関数 (Transact-SQL および CLR) サービス ブローカー キュー テーブルと列 テーブル値関数 (Transact-SQL と CLR)、および列 種類 ビューと列 シーケンス オブジェクト |
挿入する | シノニム テーブルと列 ビューと列 |
削除 | シノニム テーブルと列 ビューと列 |
実行する | プロシージャ (Transact-SQL と CLR) スカラー関数と集計関数 (Transact-SQL および CLR) シノニム CLR 型 |
受け取る | Service Broker キュー |
ビューの定義 | 可用性グループ プロシージャ (Transact-SQL と CLR) Service Broker キュー スカラー関数と集計関数 (Transact-SQL および CLR) ログイン、ユーザー、ロール シノニム 表 テーブル値関数 (Transact-SQL および CLR) 見解 シーケンス オブジェクト |
変える | 可用性グループ プロシージャ (Transact-SQL と CLR) スカラー関数と集計関数 (Transact-SQL および CLR) 順序オブジェクト ログイン、ユーザー、ロール Service Broker キュー 表 テーブル値関数 (Transact-SQL および CLR) 見解 |
責任を持つ | 可用性グループ 役割 プロシージャ (Transact-SQL と CLR) スカラー関数と集計関数 (Transact-SQL および CLR) サーバーの役割 シノニム 表 テーブル値関数 (Transact-SQL および CLR) 見解 シーケンスオブジェクト(配列やリストのようなオブジェクト) |
コントロール | 可用性グループ プロシージャ (Transact-SQL と CLR) スカラー関数と集計関数 (Transact-SQL および CLR) ログイン、ユーザー、ロール Service Broker キュー シノニム 表 テーブル値関数 (Transact-SQL および CLR) 見解 シーケンス オブジェクト |
偽装 | ログインとユーザー |
注意事項
セットアップ時にシステム オブジェクトに付与される既定のアクセス許可は、考えられる脅威に対して慎重に評価されるため、SQL Server インストールの強化の一環として変更する必要はありません。 システム オブジェクトに対するアクセス許可を変更すると、機能が制限または中断され、SQL Server のインストールがサポートされていない状態になる可能性があります。
SQL Server と SQL Database のアクセス許可
次の表に、SQL Server のアクセス許可の完全な一覧を示します。 SQL Database のアクセス許可は、サポートされている基本セキュリティ保護可能なリソースに対してのみ使用できます。 SQL Database ではサーバー レベルのアクセス許可を付与できませんが、代わりにデータベースのアクセス許可を使用できる場合があります。
基本セキュリティ保護可能なリソース | セキュリティ保護可能な基本リソースに対する詳細なアクセス許可 | アクセス許可の種類コード | ベースセキュリティを含むセキュリティ保護が可能なリソース | ベースのセキュリティ保護対象に対する詳細なアクセス許可を意味する、コンテナーのセキュリティ保護対象に対するアクセス許可 |
---|---|---|---|---|
アプリケーション ロール | 変える | アル | データベース | 任意のアプリケーション ロールを変更する |
アプリケーション ロール | コントロール | CL | データベース | コントロール |
アプリケーション 役割 | ビューの定義 | VW | データベース | ビューの定義 |
集会 | 変える | アル | データベース | 任意のアセンブリを変更 |
集会 | コントロール | CL | データベース | コントロール |
議会 | 参考文献 | RF | データベース | 参考文献 |
集会 | 主体的に取り組む | 宛先 | データベース | コントロール |
アセンブリ | ビューの定義 | VW | データベース | ビューの定義 |
非対称キー | 変更する | アル | データベース | 非対称キーを変更する |
非対称キー | コントロール | CL | データベース | コントロール |
非対称キー | 参考文献 | RF | データベース | 参考文献 |
非対称キー | 所有権を取る | 宛先 | データベース | コントロール |
非対称キー | ビューの定義 | VW | データベース | ビューの定義 |
可用性グループ | 修正する | アル | サーバー | すべての可用性グループを変更 |
可用性グループ | コントロール | CL | サーバー | CONTROL SERVER |
可用性グループ | 所有権 | 宛先 | サーバー | CONTROL SERVER |
可用性グループ | ビューの定義 | VW | サーバー | 任意の定義を表示 |
証書 | 変える | アル | データベース | ALTER ANY CERTIFICATE |
証書 | コントロール | CL | データベース | コントロール |
証書 | 参考文献 | RF | データベース | 参考文献 |
証書 | 責任を引き受ける | 宛先 | データベース | コントロール |
証書 | ビューの定義 | VW | データベース | ビューの定義 |
契約 | 変える | アル | データベース | 任意の契約を変更する |
契約 | コントロール | CL | データベース | コントロール |
契約 | 参考文献 | RF | データベース | 参考文献 |
契約 | 責任を負う | 宛先 | データベース | コントロール |
契約 | ビューの定義 | VW | データベース | ビューの定義 |
データベース | 変える | アル | サーバー | 任意のデータベースを変更する |
データベース | 任意のアプリケーション ロールを変更する | 鼻翼 | サーバー | コントロールサーバー |
データベース | 任意のアセンブリを変更する | 残念ながら | サーバー | 制御サーバー |
データベース | 非対称鍵を変更する権限を持つ | アラク | サーバー | コントロールサーバー |
データベース | ALTER ANY CERTIFICATE(任意の証明書を変更) | ALCF | サーバー | コントロールサーバー |
データベース | あらゆる契約を変更する | ALSC | サーバー | コントロールサーバー |
データベース | 任意のデータベース監査の変更 | アルダ | サーバー | サーバー監査の変更許可 |
データベース | ALTER ANY DATABASE DDL TRIGGER | AltG | サーバー | コントロールサーバー |
データベース | 任意のデータベースイベント通知を変更する | ALED | サーバー | ALTER ANY EVENT NOTIFICATION |
データベース | ALTER ANY DATABASE イベント セッション | AADS 注: SQL Database にのみ適用されます。 |
サーバー | 任意のイベントセッションを変更する |
データベース | 任意のデータスペースを変更する | ALDS | サーバー | 管理サーバー |
データベース | 任意のフルテキストカタログを変更 | ALFT | サーバー | 制御サーバー |
データベース | 任意のメッセージ型を変更する | ALMT | サーバー | 制御サーバー |
データベース | 任意のリモートサービスバインディングを変更する | ALSB | サーバー | コントロールサーバー |
データベース | あらゆるロールを変更する | ALRL | サーバー | 制御サーバー |
データベース | 任意のルートを変更 | ALRT | サーバー | 制御サーバー |
データベース | 任意のスキーマを変更する | ALSM | サーバー | コントロールサーバー |
データベース | 任意のセキュリティポリシーの変更 | ALSP 注: SQL Database にのみ適用されます。 |
サーバー | 制御サーバー |
データベース | 任意のサービスを変更する | ALSV | サーバー | CONTROL SERVER |
データベース | 対称鍵の変更可能 | ALSK | サーバー | コントロールサーバー |
データベース | 任意のユーザーを変更する | ALUS | サーバー | CONTROL SERVER |
データベース | 認証 | 認証 | サーバー | サーバーの認証 |
データベース | データベースをバックアップ | BADB | サーバー | コントロールサーバー |
データベース | バックアップ ログ | BALO | サーバー | CONTROL SERVER |
データベース | チェックポイント | CP | サーバー | CONTROL SERVER |
データベース | 繋ぐ | 一酸化炭素 | サーバー | コントロールサーバー |
データベース | 接続レプリケーション | 株式会社 | サーバー | 制御サーバー |
データベース | コントロール | CL | サーバー | コントロールサーバー |
データベース | 集計関数を作成する | 巨岩 | サーバー | 制御サーバー |
データベース | CREATE ASSEMBLY | CRAS | サーバー | コントロールサーバー |
データベース | 非対称キーを作成する | CRAK | サーバー | コントロールサーバー |
データベース | 証明書の作成 | CRCF | サーバー | 制御サーバー |
データベース | 契約を作成 | CRSC | サーバー | 制御サーバー |
データベース | データベースを作成 | CRDB | サーバー | 任意のデータベースを作成する |
データベース | データベースDDLイベント通知の作成 | CRED | サーバー | CREATE DDL イベント通知 |
データベース | デフォルトを作成する | CRDF | サーバー | 制御サーバー |
データベース | フルテキスト カタログの作成 | CRFT | サーバー | コントロールサーバー |
データベース | CREATE 関数 | CRFN | サーバー | 制御サーバー |
データベース | メッセージの種類を作成する | CRMT | サーバー | 制御サーバー |
データベース | 手順の作成 | CRPR | サーバー | 制御サーバー |
データベース | キューを作成 | CRQU | サーバー | CONTROL SERVER |
データベース | CREATE REMOTE SERVICE BINDING | CRSB | サーバー | CONTROL SERVER |
データベース | 役割を作成 | CRRL | サーバー | 制御サーバー |
データベース | ルートを作成 | 持続的腎代替療法 (CRRT) | サーバー | コントロールサーバー |
データベース | ルールを作成 | CRRU | サーバー | 制御サーバー |
データベース | スキーマを作成 (CREATE SCHEMA) | CRSM | サーバー | コントロールサーバー |
データベース | CREATE SERVICE | CRSV | サーバー | 制御サーバー |
データベース | 対称キーの作成 | CRSK | サーバー | 制御サーバー |
データベース | シノニムの作成 | CRSN | サーバー | コントロールサーバー |
データベース | テーブルを作成 | CRTB | サーバー | 制御サーバー |
データベース | 種類の作成 | CRTY | サーバー | CONTROL SERVER |
データベース | ビューの作成 | CRVW | サーバー | コントロールサーバー |
データベース | XML スキーマ コレクションの作成 | CRXS | サーバー | 制御サーバー |
データベース | 削除 | DL | サーバー | CONTROL SERVER |
データベース | 実行する | 旧 | サーバー | CONTROL SERVER |
データベース | 挿入する | で | サーバー | コントロールサーバー |
データベース | データベース接続の終了 | KIDC 注: SQL Database にのみ適用されます。 SQL Server で ALTER ANY CONNECTION を使用します。 |
サーバー | 任意の接続を変更する |
データベース | 参考文献 | RF | サーバー | CONTROL SERVER |
データベース | 選択する | SL | サーバー | コントロール サーバー |
データベース | ショープラン | SPLN | サーバー | ALTER TRACE |
データベース | クエリ通知をサブスクライブする | SUQN | サーバー | CONTROL SERVER |
データベース | 所有権 | へ | サーバー | 制御サーバー |
データベース | 更新 | 上 | サーバー | 制御サーバー |
データベース | データベース状態の表示 | VWDS | サーバー | サーバー状態を表示 |
データベース | ビューの定義 | VW | サーバー | 任意の定義を表示 |
エンドポイント | 変更する | アル | サーバー | 任意のエンドポイントを変更する |
エンドポイント | 繋ぐ | 一酸化炭素 | サーバー | 管理サーバー |
エンドポイント | コントロール | CL | サーバー | 制御サーバー |
エンドポイント | 所有権を取得する | 宛先 | サーバー | 制御サーバー |
エンドポイント | ビューの定義 | VW | サーバー | 任意の定義を表示 |
全文カタログ | 変更する | アル | データベース | 任意の全文カタログを変更する |
全文カタログ | コントロール | CL | データベース | コントロール |
全文カタログ | 参考文献 | RF | データベース | 参考文献 |
全文カタログ | 責任を持つ | 宛先 | データベース | コントロール |
全文カタログ | ビューの定義 | VW | データベース | ビューの定義 |
全文検索除外リスト | 変更する | アル | データベース | すべてのフルテキストカタログを変更する権限 |
フルテキスト停止リスト | コントロール | CL | データベース | コントロール |
全文検索ストップリスト | 参考文献 | RF | データベース | 参考文献 |
フルテキスト ストップリスト | 責任を持つ | 宛先 | データベース | コントロール |
全文検索ストップリスト | ビューの定義 | VW | データベース | ビューの定義 |
ログイン | 変更する | アル | サーバー | 任意のログインを変更する |
ログイン | コントロール | CL | サーバー | 制御サーバー |
ログイン | 偽装 | IM | サーバー | コントロールサーバー |
ログイン | ビューの定義 | VW | サーバー | 任意の定義を表示 |
メッセージの種類 | 修正する | アル | データベース | 任意のメッセージ型を変更する |
メッセージの種類 | コントロール | CL | データベース | コントロール |
メッセージの種類 | 参考文献 | RF | データベース | 参考文献 |
メッセージの種類 | 所有権を取得する | 送り先 | データベース | コントロール |
メッセージの種類 | ビューの定義 | VW | データベース | ビューの定義 |
オブジェクト | 修正する | アル | スキーマ | 変更する |
オブジェクト | コントロール | CL | スキーマ | コントロール |
オブジェクト | 削除 | ダウンロード | スキーマ | 削除 |
オブジェクト | 実行する | エックス | スキーマ | 実行する |
オブジェクト | 挿入する | で | スキーマ | 挿入する |
オブジェクト | 受信する | RC | スキーマ | コントロール |
オブジェクト | 参考文献 | RF | スキーマ | 参考文献 |
オブジェクト | 選択 | SL | スキーマ | 選ぶ |
オブジェクト | 所有権 | 宛先 | スキーマ | コントロール |
オブジェクト | 更新 | 上 | スキーマ | 更新 |
オブジェクト | 変更の追跡を表示する | VWCT | スキーマ | 変更の追跡を表示する |
オブジェクト | ビューの定義 | VW | スキーマ | ビューの定義 |
リモート サービス バインド | 変える | アル | データベース | ALTER ANY REMOTE SERVICE BINDING |
リモートサービス接続 | コントロール | CL | データベース | コントロール |
リモートサービスの結合 | 責任を持つ | 〜へ | データベース | コントロール |
リモート サービス バインド | ビューの定義 | VW | データベース | ビューの定義 |
役割 | 変える | アル | データベース | 任意のロールを変更する |
役割 | コントロール | CL | データベース | コントロール |
役割 | 所有権 | 宛先 | データベース | コントロール |
役割 | ビューの定義 | VW | データベース | ビューの定義 |
ルート | 変える | アル | データベース | 任意のルートを変更する |
ルート | コントロール | CL | データベース | コントロール |
ルート | 所有権 | 宛先 | データベース | コントロール |
ルート | ビューの定義 | VW | データベース | ビューの定義 |
物件リストを検索 | 変える | アル | サーバー | ALTER ANY FULLTEXT CATALOG |
物件リストを検索 | コントロール | CL | サーバー | コントロール |
物件リストを検索 | 参考文献 | RF | サーバー | 参考文献 |
物件リストを検索 | 所有権を取得する | 宛先 | サーバー | コントロール |
物件リストを検索 | ビューの定義 | VW | サーバー | ビューの定義 |
スキーマ | 変える | アル | データベース | ALTER ANY SCHEMA |
スキーマ | コントロール | CL | データベース | コントロール |
スキーマ | シーケンスを作成する (CREATE SEQUENCE) | CRSO | データベース | コントロール |
スキーマ | 削除 | DL | データベース | 削除 |
スキーマ | 実行する | エクス | データベース | 実行する |
スキーマ | 挿入する | で | データベース | 挿入する |
スキーマ | 参考文献 | RF | データベース | 参考文献 |
スキーマ | 選択 | SL | データベース | 選ぶ |
スキーマ | 所有権 | 宛先 | データベース | コントロール |
スキーマ | 更新 | 上 | データベース | 更新 |
スキーマ | 変更の追跡を表示する | VWCT | データベース | 変更の追跡を表示する |
スキーマ | ビューの定義 | VW | データベース | ビューの定義 |
サーバー | 一括操作の管理 | ADBO | 適用なし | 適用なし |
サーバー | ALTER ANY CONNECTION | ALCO | 適用なし | 適用なし |
サーバー | 任意の資格情報を変更する | ALCD | 適用なし | 適用なし |
サーバー | 任意のデータベースを変更する | ALDB | 適用なし | 適用なし |
サーバー | 任意のエンドポイントを変更 | ALHE | 適用なし | 適用なし |
サーバー | 任意のイベント通知を変更 | エール | 適用なし | 適用なし |
サーバー | ALTER ANY EVENT SESSION | AAES | 適用なし | 適用なし |
サーバー | 任意のリンク サーバーを変更する | オールズ | 適用なし | 適用なし |
サーバー | ログインを変更する権限を持つ | ALLG | 適用なし | 適用なし |
サーバー | いずれかのサーバー監査を変更する | ALAA | 適用なし | 適用なし |
サーバー | 任意のサーバー ロールを変更する | ALSR | 適用なし | 適用なし |
サーバー | 可用性グループの変更 | ALAG | 適用なし | 適用なし |
サーバー | リソースを変更する | ALRS | 適用なし | 適用なし |
サーバー | サーバーの状態を変更 | ALSS | 適用なし | 適用なし |
サーバー | 設定を変更する | ALST | 適用なし | 適用なし |
サーバー | ALTER TRACE | ALTR | 適用なし | 適用なし |
サーバー | サーバーの認証 | 認証 | 適用なし | 適用なし |
サーバー | 任意のデータベースを接続する | CADB | 適用なし | 適用なし |
サーバー | CONNECT SQL | COSQ | 適用なし | 適用なし |
サーバー | 制御サーバー | CL | 適用なし | 適用なし |
サーバー | 任意のデータベースを作成する | CRDB | 適用なし | 適用なし |
サーバー | 可用性グループの作成 | CRAC | 適用なし | 適用なし |
サーバー | DDL イベント通知を作成 | CRDE | 適用なし | 適用なし |
サーバー | エンドポイントを作成 | CRHE | 適用なし | 適用なし |
サーバー | CREATE SERVER ROLE(サーバーロールを作成) | CRSR | 適用なし | 適用なし |
サーバー | トレース イベント通知の作成 | CRTE | 適用なし | 適用なし |
サーバー | 外部アクセスアセンブリ | XA | 適用なし | 適用なし |
サーバー | 任意のログインを偽装する | IAL | 適用なし | 適用なし |
サーバー | すべてのユーザー セキュリティ保護可能なリソースを選択する | SUS | 適用なし | 適用なし |
サーバー | シャットダウン | SHDN | 適用なし | 適用なし |
サーバー | 危険な組み立て | 徐 | 適用なし | 適用なし |
サーバー | 任意のデータベースを表示 | VWDB | 適用なし | 適用なし |
サーバー | 任意の定義を表示 | VWAD | 適用なし | 適用なし |
サーバー | サーバー状態を表示 | VWSS | 適用なし | 適用なし |
サーバーロール | 変える | アル | サーバー | 任意のサーバー ロールを変更 |
サーバーの役割 | コントロール | CL | サーバー | コントロールサーバー |
サーバーの役割 | 引き受ける | 宛先 | サーバー | 制御サーバー |
サーバーロール | 定義を表示 | VW | サーバー | 任意の定義を表示 |
サービス | 変える | アル | データベース | すべてのサービスを変更する |
サービス | コントロール | CL | データベース | コントロール |
サービス | 送信 | SN | データベース | コントロール |
サービス | 主体的に取り組む | 宛先 | データベース | コントロール |
サービス | ビューの定義 | VW | データベース | ビューの定義 |
対称キー | 変える | アル | データベース | 任意の対称キーを変更 |
対称キー | コントロール | CL | データベース | コントロール |
対称キー | 参考文献 | RF | データベース | 参考文献 |
対称キー | 責任を持つ | 宛先 | データベース | コントロール |
対称キー | ビューの定義 | VW | データベース | ビューの定義 |
タイプ | コントロール | CL | スキーマ | コントロール |
タイプ | 実行する | 旧 | スキーマ | 実行する |
タイプ | 参考文献 | RF | スキーマ | 参考文献 |
タイプ | 主体性を持つ | 宛先 | スキーマ | コントロール |
タイプ | ビューの定義 | VW | スキーマ | ビューの定義 |
利用者 | 変更する | アル | データベース | 任意のユーザーを変更 |
利用者 | コントロール | CL | データベース | コントロール |
利用者 | 偽装 | IM | データベース | コントロール |
利用者 | ビューの定義 | VW | データベース | ビューの定義 |
XML スキーマ コレクション | 変える | アル | スキーマ | 変更する |
XML スキーマ コレクション | コントロール | CL | スキーマ | コントロール |
XML スキーマ コレクション | 実行する | EX | スキーマ | 実行する |
XML スキーマ コレクション | 参考文献 | RF | スキーマ | 参考文献 |
XML スキーマ コレクション | 責任を取る | 宛先 | スキーマ | コントロール |
XML スキーマ コレクション | ビューの定義 | VW | スキーマ | ビューの定義 |
アクセス許可チェック アルゴリズムの概要
アクセス許可の確認は複雑な場合があります。 アクセス許可チェック アルゴリズムには、重複するグループ メンバーシップと所有権が含まれています。明示的なアクセス許可と暗黙的なアクセス許可の両方が含まれており、セキュリティ保護可能なエンティティを含むセキュリティ保護可能なクラスに対するアクセス許可の影響を受ける可能性があります。 アルゴリズムの一般的なプロセスは、関連するすべてのアクセス許可を収集することです。 ブロック DENY が見つからない場合、アルゴリズムは十分なアクセスを提供する GRANT を検索します。 このアルゴリズムには、 セキュリティ コンテキスト、 アクセス許可領域、 および必要なアクセス許可の 3 つの重要な要素が含まれています。
注
sa、dbo、エンティティ所有者、information_schema、sys、または自分自身に対するアクセス許可を付与、拒否、または取り消すことはできません。
セキュリティ コンテキスト
これは、アクセスチェックにアクセス許可を提供するプリンシパルのグループです。 セキュリティ コンテキストが EXECUTE AS ステートメントを使用して別のログインまたはユーザーに変更されていない限り、現在のログインまたはユーザーに関連するアクセス許可です。 セキュリティ コンテキストには、次のプリンシパルが含まれています。
ログイン
ユーザー
ロール メンバーシップ
Windows グループ メンバーシップ
モジュール署名が使用されている場合は、ユーザーが現在実行しているモジュールの署名に使用される証明書のログインまたはユーザー アカウントと、そのプリンシパルの関連付けられているロール メンバーシップ。
アクセス許可領域
これは、セキュリティ保護対象のエンティティと、セキュリティ保護対象を含むセキュリティ保護対象のクラスです。 たとえば、テーブル (セキュリティ保護可能なエンティティ) は、スキーマのセキュリティ保護可能なクラスとデータベースのセキュリティ保護可能なクラスに含まれます。 アクセスは、テーブル、スキーマ、データベース、およびサーバー レベルのアクセス許可の影響を受ける可能性があります。 詳細については、「 権限階層 (データベース エンジン)」を参照してください。
必要なアクセス許可
必要なアクセス許可の種類。 たとえば、INSERT、UPDATE、DELETE、SELECT、EXECUTE、ALTER、CONTROL などです。
次の例のように、アクセスには複数のアクセス許可が必要な場合があります。
ストアド プロシージャには、ストアド プロシージャに対する EXECUTE 権限と、ストアド プロシージャによって参照される複数のテーブルに対する INSERT 権限の両方が必要な場合があります。
動的管理ビューには、ビューに対する VIEW SERVER STATE 権限と SELECT 権限の両方が必要な場合があります。
アルゴリズムの一般的な手順
アルゴリズムがセキュリティ保護可能なリソースへのアクセスを許可するかどうかを決定する場合、使用する正確な手順は、関係するプリンシパルとセキュリティ保護可能なリソースによって異なる場合があります。 ただし、アルゴリズムは次の一般的な手順を実行します。
ログインが sysadmin 固定サーバー ロールのメンバーであるか、またはユーザーが現在のデータベースの dbo ユーザーである場合は、アクセス許可チェックをバイパスします。
所有権チェーンが適用され、チェーンの前のオブジェクトに対するアクセス チェックがセキュリティ チェックに合格した場合は、アクセスを許可します。
セキュリティ コンテキストを作成するために、呼び出し元に関連付けられているサーバー レベル、データベース レベル、および署名付きモジュールの ID を集計します。
その セキュリティ コンテキストでは、アクセス許可領域に対して許可または拒否されたすべての アクセス許可を収集します。 アクセス許可は、GRANT、GRANT WITH GRANT、または DENY として明示的に指定することができます。または、アクセス許可が暗黙的な GRANT または DENY、もしくはそれを包括するアクセス許可である可能性があります。 たとえば、スキーマに対する CONTROL 権限は、テーブルに対する CONTROL を意味します。 また、テーブルの CONTROL は SELECT を意味します。 そのため、スキーマに対する CONTROL が付与されている場合は、テーブルの SELECT が付与されます。 テーブルで CONTROL が拒否された場合、テーブルの SELECT は拒否されます。
注
列レベルの権限の GRANT は、オブジェクト レベルで DENY をオーバーライドします。
必要なアクセス許可を特定します。
必要なアクセス許可が、アクセス許可空間内のオブジェクトのセキュリティ コンテキスト内のいずれかの ID に対して直接または暗黙的に拒否された場合は、アクセス許可チェックを失敗します。
必要なアクセス許可が拒否されておらず、必要なアクセス許可に GRANT または GRANT WITH GRANT アクセス許可が直接または暗黙的に含まれている場合は、アクセス許可チェックに合格します。権限空間内の任意のオブジェクトのセキュリティ コンテキスト内の任意の ID に直接または暗黙的にアクセス許可を付与します。
例示
このセクションの例では、アクセス許可情報を取得する方法を示します。
ある。 許可可能なアクセス許可の完全な一覧を返す
次のステートメントは、 fn_builtin_permissions
関数を使用して、すべてのデータベース エンジンのアクセス許可を返します。 詳細については、「 sys.fn_builtin_permissions (Transact-SQL)」を参照してください。
SELECT * FROM fn_builtin_permissions(default);
GO
B. オブジェクトの特定のクラスに対するアクセス許可を返す
次の例では、 fn_builtin_permissions
を使用して、セキュリティ保護可能なカテゴリで使用できるすべてのアクセス許可を表示します。 この例では、アセンブリに対するアクセス許可を返します。
SELECT * FROM fn_builtin_permissions('assembly');
GO
C. オブジェクトの実行中のプリンシパルに付与されたアクセス許可を返す
次の例では、 fn_my_permissions
を使用して、指定したセキュリティ保護可能なリソースの呼び出し元プリンシパルによって保持されている有効なアクセス許可の一覧を返します。 この例では、 Orders55
という名前のオブジェクトに対するアクセス許可を返します。 詳細については、「 sys.fn_my_permissions (Transact-SQL)」を参照してください。
SELECT * FROM fn_my_permissions('Orders55', 'object');
GO
D. 指定したオブジェクトに適用できるアクセス許可を返す
次の例では、 Yttrium
というオブジェクトに適用できるアクセス許可を返します。 組み込みの関数 OBJECT_ID
は、オブジェクト Yttrium
の ID を取得するために使用されます。
SELECT * FROM sys.database_permissions
WHERE major_id = OBJECT_ID('Yttrium');
GO