sp_setapprole (Transact-SQL)
適用対象: SQL Server
Azure SQL Database
現在のデータベースのアプリケーション ロールに関連付けられているアクセス許可をアクティブにします。
構文
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 は bit で、既定値は 0
です。
true
は暗黙的に 1
に変換されます。 false
は暗黙的に 0
に変換されます。
[ @cookie = ] cookie OUTPUT
クッキーを含める出力パラメーターを指定します。 @cookie は、 varbinary(8000)型の OUTPUT パラメーターです。 クッキーは、 @fCreateCookie の値が true
場合にのみ生成されます。
Note
現在の実装では varbinary(50) が返されますが、アプリケーションはドキュメントに記載されている varbinary(8000)を予約する必要があります。そのため、今後のリリースで Cookie の戻りサイズが大きくなると、アプリケーションは正常に動作し続けます。
リターン コードの値
0
(成功) と 1
(失敗)。
解説
sp_setapprole
を使用してアプリケーション ロールをアクティブ化した後、ユーザーがサーバーから切断されるか、sp_unsetapprole
実行されるまで、ロールはアクティブなままになります。 別のストアド プロシージャ、トリガー、またはユーザー定義トランザクション内で sp_setapprole
を使用することはできません。 直接 Transact-SQL ステートメントとしてのみ実行できます。
アプリケーション ロールの概要については、「 アプリケーション ロール」を参照してください。
アプリケーション ロールを有効にする場合は、常に暗号化された接続を使用して、ネットワーク経由で送信するときにアプリケーション ロールのパスワードを保護する必要があります。
Microsoft ODBC encrypt
オプションは、 SqlClient ではサポートされていません。 資格情報を格納する必要がある場合は、Crypto API 関数を使用して暗号化します。 パラメーター @password は、一方向ハッシュとして格納されます。 以前のバージョンの SQL Server との互換性を維持するために、 sp_addapprole
はパスワードの複雑さのポリシーを適用しません。 パスワードの複雑さのポリシーを適用するには、 CREATE APPLICATION ROLE を使用します。
アクセス許可
public のメンバーシップとロールのパスワードに関する知識が必要です。
例
A. 暗号化オプションを使用せずにアプリケーション ロールをアクティブ化する
次の例では、現在のユーザーが使用するアプリケーション用に設計されたアクセス許可で作成されたプレーンテキスト パスワード AsDeF00MbXX
を使用して、SalesAppRole
という名前のアプリケーション ロールをアクティブにします。
EXEC sys.sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO
B. Cookie を使用してアプリケーション ロールをアクティブ化し、元のコンテキストに戻す
次の例では、パスワード 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