sp_setapprole (Transact-SQL)

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

トピック リンク アイコン Transact-SQL 構文表記規則

構文

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

引数

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

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

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

    重要な注意事項重要

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

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

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

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

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

    注意

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

リターン コード値

0 (成功) または 1 (失敗)

説明

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

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

セキュリティに関する注意セキュリティに関する注意

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

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

権限

public のメンバーシップと、ロールのパスワード情報が必要です。

使用例

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

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

EXEC sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO

B. クッキーの作成を指定してアプリケーション ロールをアクティブ化し、その後元のコンテキストに戻す

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

DECLARE @cookie varbinary(8000);
EXEC 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 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)