Share via


sp_setapprole (Transact-SQL)

適用対象:SQL ServerAzure SQL Database

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

Transact-SQL 構文表記規則

構文

sp_setapprole
    [ @rolename = ] N'rolename'
    , [ @password = ] N'password'
    [ , [ @encrypt = ] 'encrypt' ]
    [ , [ @fCreateCookie = ] fCreateCookie ]
    [ , [ @cookie = ] cookie OUTPUT ]
[ ; ]

引数

[ @rolename = ] N'rolename'

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

[ @password = ] { encrypt N'password' }

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

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

重要

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

[ @encrypt = ] { 'none' |'odbc' }

SQL Server データベース エンジンにパスワードを送信する前の暗号化の種類を指定します。 @encryptは varchar(10) で、これらの値のいずれかを指定できます。

Value 説明
none (既定値) 難読化が使用されていないことを指定します。 パスワードは、プレーン テキストとして SQL Server に渡されます。
odbc SQL Server データベース エンジンにパスワードを送信する前に、ODBC 関数を使用してパスワードencryptを難読化するように指定します。 この値は、ODBC クライアントまたは OLE DB Provider for SQL Server を使用している場合にのみ指定できます。

[ @fCreateCookie = ] { 'true' |'false' }

クッキーを作成するかどうかを指定します。 @fCreateCookieはビットで、既定値は 0.

true は暗黙的に に 1変換されます。 false は暗黙的に に 0変換されます。

クッキーを含める出力パラメーターを指定します。 @cookieは varbinary(8000) 型の OUTPUT パラメーターです。 クッキーは、@fCreateCookietrue値が .

Note

現在の実装では varbinary(50) がされますが、今後のリリースで Cookie の戻りサイズが大きくなるとアプリケーションが正常に動作し続けるために、アプリケーションは文書化された varbinary(8000) を予約する必要があります。

リターン コードの値

0 (成功) と 1 (失敗)。

解説

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

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

アプリケーション ロールを有効にする場合は、常に暗号化された接続を使用して、ネットワーク経由で送信するときにアプリケーション ロールのパスワードを保護する必要があります。

Microsoft ODBC encrypt オプションは、SqlClient ではサポートされていません。 資格情報を格納する必要がある場合は、Crypto API 関数を使用して暗号化します。 パラメーター @password は、一方向ハッシュとして格納されます。 以前のバージョンの SQL Server との互換性を維持するために、 sp_addapprole パスワードの複雑さのポリシーは適用されません。 パスワードの複雑さのポリシーを適用するには、CREATE APPLICATION ROLE を使用します。

アクセス許可

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

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

次の例では、プレーンテキスト パスワードAsDeF00MbXXを使用して、現在のユーザーが使用するアプリケーション用に設計されたアクセス許可で作成された、という名前SalesAppRoleのアプリケーション ロールをアクティブにします。

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;

アプリケーション ロールがアクティブになりました。 USER_NAME() は、アプリケーション ロール Sales11の名前を返します。

SELECT USER_NAME();

アプリケーション ロールの設定を解除します。

EXEC sys.sp_unsetapprole @cookie;
GO

アプリケーション ロールはアクティブではなくなりました。 元のコンテキストが復元されます。 USER_NAME() は元のユーザーの名前を返します。

SELECT USER_NAME();
GO