sp_setapprole (Transact-SQL)

適用対象:SQL ServerAzure SQL Database

現在のデータベースのアプリケーション ロールに関連付けられているアクセス許可をアクティブにします。

Transact-SQL 構文表記規則

構文

sp_setapprole [ @rolename = ] 'role',  
    [ @password = ] { encrypt N'password' }
      |  
        'password' [ , [ @encrypt = ] { 'none' | 'odbc' } ]  
        [ , [ @fCreateCookie = ] true | false ]  
    [ , [ @cookie = ] @cookie OUTPUT ]  

引数

[ @rolename = ] 'role' 現在のデータベースで定義されているアプリケーション ロールの名前を指定します。 rolesysname で、既定値はありません。 ロール は、現在のデータベースに存在する必要があります。

[ @password = ] { encrypt N'password' } アプリケーション ロールをアクティブ化するために必要なパスワードです。 passwordsysname で、既定値はありません。 パスワード は、ODBC 暗号化 関数を使用して難読化できます。 encrypt 関数を使用する場合は、最初の引用符の前に N を配置して、パスワードを Unicode 文字列に変換する必要があります。

暗号化オプションは、 SqlClient を使用している接続ではサポートされていません。

重要

ODBC 暗号化 関数は暗号化を提供しません。 この機能を使用して、ネットワーク経由で送信されるパスワードを保護しないでください。 この情報がネットワーク経由で送信される場合は、TLS または IPSec を使用します。

@encrypt = 'none'
暗号化を使用しないことを示します。 パスワードはプレーン テキストとしてSQL Serverに渡されます。 既定値です。

@encrypt= 'odbc'
ODBC 暗号化関数を使用してパスワードを難読化してから、SQL Server データベース エンジンにパスワードを送信するように指定します。 これは、ODBC クライアントまたは OLE DB Provider for SQL Serverを使用している場合にのみ指定できます。

[ @fCreateCookie = ] true | false Cookie を作成するかどうかを指定します。 true は暗黙的に 1 に変換されます。 false は暗黙的に 0 に変換されます。

[ @cookie = ] @cookie OUTPUT Cookie を格納する出力パラメーターを指定します。 クッキーは、 @fCreateCookie の値が true の場合にのみ生成されます。 varbinary(8000)

Note

sp_setapprole のクッキーの OUTPUT パラメーターは現在、適切な最大長である varbinary(8000) としてドキュメントに記載されています。 ただし、現在の実装では varbinary(50) を返します。 今後のリリースでクッキーの戻りサイズが大きくなるとアプリケーションが正常に動作し続けるために、アプリケーションは varbinary(8000) を引き続き予約する必要があります。

リターン コードの値

0 (成功) と 1 (失敗)

解説

sp_setapproleを使用してアプリケーション ロールをアクティブ化した後、ユーザーがサーバーから切断されるか、sp_unsetapprole実行されるまで、ロールはアクティブなままになります。 sp_setapprole は、別のストアド プロシージャ、トリガー、またはユーザー定義トランザクション内ではなく、アドホック レベルの直接 Transact-SQL ステートメントでのみ実行できます。

アプリケーション ロールの概要については、「アプリケーション ロール」を参照してください。

重要

ネットワーク経由で送信されるときにアプリケーション ロールのパスワードを保護するには、アプリケーション ロールを有効にするときに常に暗号化された接続を使用する必要があります。 Microsoft ODBC 暗号化 オプションは、 SqlClient ではサポートされていません。 資格情報を格納する必要がある場合は、Crypto API 関数を使用して暗号化します。 パラメーター パスワード は、一方向ハッシュとして格納されます。 以前のバージョンのSQL Serverとの互換性を維持するために、パスワードの複雑さのポリシーは、sp_addapproleによって適用されません。 パスワードの複雑さのポリシーを適用するには、 CREATE APPLICATION ROLE を使用します。

アクセス許可

ロールのパブリックメンバーシップとパスワードの知識が必要です。

A. 暗号化オプションを使用せずにアプリケーション ロールをアクティブ化する

次の例では、アプリケーション ロール SalesAppRole をアクティブにします。このロールには、プレーンテキストのパスワード AsDeF00MbXX が設定されており、現在のユーザーが使用するアプリケーション用に特別に設計された権限が与えられています。

EXEC sys.sp_setapprole 'SalesApprole', 'AsDeF00MbXX';  
GO

次の例では、パスワード Sales11 が設定されているアプリケーション ロール fdsd896#gfdbfdkjgh700mM をアクティブ化し、クッキーを作成します。 この例では、現在のユーザーの名前が返されます。その後、sp_unsetapprole を実行して元のコンテキストに戻します。

DECLARE @cookie varbinary(8000);  
EXEC sys.sp_setapprole 'Sales11', 'fdsd896#gfdbfdkjgh700mM'  
    , @fCreateCookie = true, @cookie = @cookie OUTPUT;  
-- The application role is now active.  
SELECT USER_NAME();  
-- This will return the name of the application role, Sales11.  
EXEC sys.sp_unsetapprole @cookie;  
-- The application role is no longer active.  
-- The original context has now been restored.  
GO  
SELECT USER_NAME();  
-- This will return the name of the original user.
GO

参照

システム ストアド プロシージャ (Transact-SQL)
セキュリティ ストアド プロシージャ (Transact-SQL)
CREATE APPLICATION ROLE (Transact-SQL)
DROP APPLICATION ROLE (Transact-SQL)
sp_unsetapprole (Transact-SQL)