次の方法で共有


sp_setapprole (Transact-SQL)

適用対象: SQL Server Azure SQL Database

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

Transact-SQL 構文表記規則

構文

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

引数

[ @rolename = ] N'rolename'

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

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

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

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

重要

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

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

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

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

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

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

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

クッキーを含める出力パラメーターを指定します。 @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

次の例では、パスワード 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