sp_setapprole (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
Указывает, должен ли создаваться файл «cookie». Значение true неявно преобразуется в 1. Значение false неявно преобразуется в 0.[ @cookie = ] @cookie OUTPUT
Указывает выходной параметр, содержащий «cookie». Файл «cookie» формируется, только если значением аргумента @fCreateCookie является true. varbinary(8000)
Значения кодов возврата
0 (успешное завершение) и 1 (неуспешное завершение)
Замечания
После включения роли приложения при помощи хранимой процедуры sp_setapprole роль остается активной до тех пор, пока пользователь не отключится от сервера или не выполнит процедуру sp_unsetapprole. Процедура sp_setapprole может быть запущена только непосредственными инструкциями языка Transact-SQL. Процедура sp_setapprole не может выполняться в пределах другой хранимой процедуры или пользовательской транзакции.
Обзор ролей приложения см. в разделе Роли приложений.
Примечание по безопасности |
---|
Чтобы защитить пароля роли приложения в момент передачи по сети, необходимо всегда использовать зашифрованное соединение при включении роли приложения. Параметр Microsoft ODBC encrypt не поддерживается приложением SqlClient. Если необходимо сохранить учетные данные, зашифруйте их с помощью функций API. Аргумент password хранится в виде значения необратимой хэш-функции, которой этот аргумент передан как параметр. Для сохранения совместимости с более ранними версиями сервера SQL Server процедура sp_addapprole не задает ограничений сложности пароля. Если нужно использовать политику сложности паролей, выполните инструкцию CREATE APPLICATION ROLE. |
Разрешения
Требует членства в роли public и знания пароля для роли.
Примеры
A. Включение роли приложения без возможности шифрования
В следующем примере включается роль приложения с именем SalesAppRole с паролем в виде простого текста AsDeF00MbXX, созданная с разрешениями, специально предназначенными для приложения, выполняемого текущим пользователем.
EXEC sp_setapprole 'SalesApprole', 'AsDeF00MbXX';
GO
Б. Включение роли приложения с файлом «cookie» и последующим возвратом к исходному контексту
В следующем примере включается роль приложения Sales11 с паролем fdsd896#gfdbfdkjgh700mM и создается файл «cookie». В примере возвращается имя текущего пользователя, после чего происходит восстановление к исходному контексту с помощью выполнения процедуры 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