アプリケーション ロール
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance
アプリケーション ロールは、ユーザーのような独自の権限でアプリケーションを実行できるようにするデータベース プリンシパルです。 アプリケーション ロールを使用すると、特定のアプリケーションから接続しているユーザーに対してのみ、特定のデータへのアクセスを有効にできます。 アプリケーション ロールは、データベース ロールとは異なり、既定ではメンバーが含まれておらず、アクティブではありません。 アプリケーション ロールは sp_setapproleを使用して有効化され、これにはパスワードが必要です。 アプリケーション ロールはデータベース レベルのプリンシパルであるため、他のデータベースへのアクセスは、そのデータベースの guestに許可された権限を介してのみ可能になります。 したがって、guest が無効になったデータベースには、他のデータベースのアプリケーション ロールからアクセスできなくなります。
SQL Server では、アプリケーション ロールは、サーバー レベルのプリンシパルと関連付けられていないため、サーバー レベルのメタデータにはアクセスできません。 この制限を無効にして、アプリケーション ロールがサーバー レベルのメタデータにアクセスできるようにするには、-T4616 または DBCC TRACEON (4616, -1)
を使用してグローバル トレース フラグ 4616 を設定します。 このトレース フラグを有効にしない場合は、証明書署名付きストアド プロシージャを使用して、アプリケーション ロールがサーバーの状態を表示できるようにします。 サンプル コードについては、GitHub のこのサンプル スクリプトを参照してください。
アプリケーション ロールを使用して接続する
アプリケーション ロールがセキュリティ コンテキストを切り替える処理を行う手順は次のとおりです。
ユーザーがクライアント アプリケーションを実行します。
クライアント アプリケーションが、SQL Server のインスタンスにユーザーとして接続します。
アプリケーションが、このアプリケーションのみに対して既知であるパスワードを使用して、
sp_setapprole
ストアド プロシージャを実行します。アプリケーション ロール名およびパスワードが有効であれば、アプリケーション ロールが有効になります。
この時点で、接続はユーザーの権限を失い、アプリケーション ロールの権限を取得します。
アプリケーション ロールを使用して取得した権限は、接続している間のみ有効です。
前のバージョンの 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 は一方向のハッシュとして格納されます。
Related Tasks
タスク | Type |
---|---|
アプリケーション ロールを作成する。 | アプリケーション ロールの作成および CREATE APPLICATION ROLE (Transact-SQL) |
アプリケーション ロールを変更する。 | ALTER APPLICATION ROLE (Transact-SQL) |
アプリケーション ロールを削除する。 | DROP APPLICATION ROLE (Transact-SQL) |
アプリケーション ロールを使用する。 | sp_setapprole (Transact-SQL) |