アプリケーション ロール

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

アプリケーション ロールは、ユーザーのような独自の権限でアプリケーションを実行できるようにするデータベース プリンシパルです。 アプリケーション ロールを使用すると、特定のアプリケーションから接続しているユーザーに対してのみ、特定のデータへのアクセスを有効にできます。 アプリケーション ロールは、データベース ロールとは異なり、既定ではメンバーが含まれておらず、アクティブではありません。 アプリケーション ロールは sp_setapproleを使用して有効化され、これにはパスワードが必要です。 アプリケーション ロールはデータベース レベルのプリンシパルであるため、他のデータベースへのアクセスは、そのデータベースの guestに許可された権限を介してのみ可能になります。 したがって、guest が無効になったデータベースには、他のデータベースのアプリケーション ロールからアクセスできなくなります。

SQL Server では、アプリケーション ロールは、サーバー レベルのプリンシパルと関連付けられていないため、サーバー レベルのメタデータにはアクセスできません。 この制限を無効にして、アプリケーション ロールがサーバー レベルのメタデータにアクセスできるようにするには、-T4616 または DBCC TRACEON (4616, -1) を使用してグローバル トレース フラグ 4616 を設定します。 このトレース フラグを有効にしない場合は、証明書署名付きストアド プロシージャを使用して、アプリケーション ロールがサーバーの状態を表示できるようにします。 サンプル コードについては、GitHub のこのサンプル スクリプトを参照してください。

アプリケーション ロールを使用して接続する

アプリケーション ロールがセキュリティ コンテキストを切り替える処理を行う手順は次のとおりです。

  1. ユーザーがクライアント アプリケーションを実行します。

  2. クライアント アプリケーションが、SQL Server のインスタンスにユーザーとして接続します。

  3. アプリケーションが、このアプリケーションのみに対して既知であるパスワードを使用して、sp_setapprole ストアド プロシージャを実行します。

  4. アプリケーション ロール名およびパスワードが有効であれば、アプリケーション ロールが有効になります。

  5. この時点で、接続はユーザーの権限を失い、アプリケーション ロールの権限を取得します。

アプリケーション ロールを使用して取得した権限は、接続している間のみ有効です。

前のバージョンの SQL Server では、アプリケーション ロールの開始後にユーザーが元のセキュリティ コンテキストを再取得するには、SQL Server を切断して再接続する以外にありませんでした。 SQL Server 2005 (9.x) 以降では、sp_setapprole には Cookie を作成するオプションがあります。 クッキーには、アプリケーション ロールが有効になる前のコンテキスト情報が格納されます。 その後、sp_unsetapprole はストアド プロシージャは Cookie を使用してセッションを元のコンテキストに戻します。 この新しいオプションと例については、「sp_setapprole (Transact-SQL) 」と「sp_unsetapprole (Transaction-SQL)」を参照してください。

重要

SqlClient では、ODBC encryptオプションはサポートされていません。 機密情報をネットワーク経由で送信する場合、トランスポート層セキュリティ (TLS) (旧称 Secure Sockets Layer (SSL)) または IPsec を使用してチャネルを暗号化します。 クライアント アプリケーション内に資格情報を保持しておく必要がある場合、暗号化 API (Crypto API) 関数を使用して資格情報を暗号化します。 SQL Server 2005 (9.x) 以降のバージョンでは、パラメーター password は一方向のハッシュとして格納されます。

タスク Type
アプリケーション ロールを作成する。 アプリケーション ロールの作成および CREATE APPLICATION ROLE (Transact-SQL)
アプリケーション ロールを変更する。 ALTER APPLICATION ROLE (Transact-SQL)
アプリケーション ロールを削除する。 DROP APPLICATION ROLE (Transact-SQL)
アプリケーション ロールを使用する。 sp_setapprole (Transact-SQL)

関連項目

SQL Server の保護