sp_setapprole (Transact-SQL)

Активирует разрешения, связанные с ролью приложения в текущей базе данных.

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Cинтаксические обозначения в 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 encrypt. При использовании функции encrypt пароль должен быть преобразован в строку в Юникоде модификатором N перед первой кавычкой.

    Аргумент encrypt не поддерживается на соединениях, использующих SqlClient.

    Важное примечаниеВажно!

    Функция ODBC encrypt не обеспечивает шифрования.Не следует полагаться на эту функцию для защиты паролей, передаваемых по сети.При передаче таких данных по сети используйте протокол SSL или IPSec.

  • @encrypt = 'none'
    Указывает, что кодирование пароля не используется. Пароль передается серверу SQL Server как обычный текст. Это режим по умолчанию.

  • @encrypt= 'odbc'
    Указывает, что ODBC закодирует пароль при помощи функции encrypt перед отправкой компоненту Компонент SQL Server Database Engine. Этот аргумент может быть указан, только если используется клиент ODBC или поставщик OLE DB для SQL Server.

  • [ @fCreateCookie = ] true | false
    Указывает, должен ли создаваться куки-файл. true неявно преобразуется в 1. false неявно преобразуется в 0.

  • [ @cookie = ] @cookie OUTPUT
    Указывает выходной параметр, содержащий куки-файл. Куки-файл формируется только в случае, если аргумент @fCreateCookie равен true. varbinary(8000)

    Примечание

    Параметр OUTPUT куки-файла для sp_setapprole в настоящее время описан в документации как varbinary(8000), что верно определяет его максимальную длину.Однако текущая реализация возвращает varbinary(50).Дальнейшее резервирование varbinary(8000) в приложениях необходимо для обеспечения правильного продолжения работы в случае увеличения размера куки-файлов в последующих выпусках.

Значения кода возврата

0 (успешное завершение) и 1 (неуспешное завершение)

Замечания

После активации роли приложения с помощью процедуры sp_setapprole роль остается активной до тех пор, пока пользователь либо отсоединится от сервера, либо выполнит процедуру sp_unsetapprole. sp_setapprole можно выполнить только непосредственными инструкциями Transact-SQL. Хранимая процедура sp_addapprole не может выполняться внутри другой хранимой процедуры или транзакции, определенной пользователем.

Обзор ролей приложения см. в разделе Роли приложений.

Примечание по безопасностиПримечание по безопасности

Чтобы защитить пароля роли приложения в момент передачи по сети, необходимо всегда использовать зашифрованное соединение при включении роли приложения.

Параметр Microsoft ODBC encrypt не поддерживается приложением SqlClient.Если необходимо сохранить учетные данные, зашифруйте их с помощью функций API.Аргумент password хранится в виде значения необратимой хэш-функции, которой этот аргумент передан как параметр.Для сохранения совместимости с более ранними версиями сервера SQL Server процедура sp_addapprole не задает ограничений сложности пароля.Если нужно использовать политику сложности паролей, выполните инструкцию CREATE APPLICATION ROLE.

Разрешения

Требует членства в роли public и знания пароля для роли.

Примеры

А.Включение роли приложения без параметра шифрования

В следующем примере включается роль приложения с именем SalesAppRole с паролем в виде простого текста AsDeF00MbXX, созданная с разрешениями, специально предназначенными для приложения, выполняемого текущим пользователем.

EXEC sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO

Б.Включение роли приложения с куки-файлом и последующим возвратом к исходному контексту

В следующем примере включается роль приложения Sales11 с паролем fdsd896#gfdbfdkjgh700mM и создается куки-файл. В примере возвращается имя текущего пользователя, после чего происходит возврат к исходному контексту с помощью выполнения процедуры 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)