Создание ролей приложений в SQL ServerCreating Application Roles in SQL Server

Роли приложения предоставляют возможность назначать разрешения приложению, а не ролям базы данных или пользователям.Application roles provide a way to assign permissions to an application instead of a database role or user. Пользователи могут соединиться с базой данных, активировать роль приложения и воспользоваться разрешениями, предоставленными приложению.Users can connect to the database, activate the application role, and assume the permissions granted to the application. Разрешения, предоставленные роли приложения, действуют в течение всего соединения.The permissions granted to the application role are in force for the duration of the connection.

Важно!

Роли приложения активируются, когда клиентское приложение передает имя роли приложения и пароль в строке соединения.Application roles are activated when a client application supplies an application role name and a password in the connection string. В двухуровневом приложении безопасность при этом снижается, поскольку пароль должен храниться на клиентском компьютере.They present a security vulnerability in a two-tier application because the password must be stored on the client computer. В трехуровневом приложении пароль можно хранить так, чтобы он не был доступен пользователям приложения.In a three-tier application, you can store the password so that it cannot be accessed by users of the application.

Функции ролей приложенияApplication Role Features

Роли приложения имеют следующие возможности.Application roles have the following features:

  • В отличие от ролей базы данных роли приложения не содержат элементов.Unlike database roles, application roles contain no members.

  • Роли приложения активируются, когда клиентское приложение передает имя и пароль роли приложения системной хранимой процедуре sp_setapprole.Application roles are activated when an application supplies the application role name and a password to the sp_setapprole system stored procedure.

  • Пароль должен храниться на клиентском компьютере и передаваться во время выполнения. Роль приложения нельзя активировать из SQL Server.The password must be stored on the client computer and supplied at run time; an application role cannot be activated from inside of SQL Server.

  • Пароль не зашифрован.The password is not encrypted. При сохранении пароля используется одностороннее хэширование.The parameter password is stored as a one-way hash.

  • После активации разрешения, полученные через роль приложения, действуют в течение всего соединения.Once activated, permissions acquired through the application role remain in effect for the duration of the connection.

  • Роль приложения наследует разрешения, предоставленные роли public.The application role inherits permissions granted to the public role.

  • Если роль приложения активирует член предопределенной роли сервера sysadmin, контекст безопасности переключается на контекст безопасности роли приложения на все время соединения.If a member of the sysadmin fixed server role activates an application role, the security context switches to that of the application role for the duration of the connection.

  • Если создать учетную запись guest в базе данных, в которой имеется роль приложения, то не нужно будет создавать учетную запись для роли приложения или для любого имени входа, вызывающего эту роль.If you create a guest account in a database that has an application role, you do not need to create a database user account for the application role or for any of the logins that invoke it. Роли приложения могут получать прямой доступ к другой базе данных, только если во второй базе данных существует учетная запись guest.Application roles can directly access another database only if a guest account exists in the second database

  • Встроенные функции, возвращающие имена входа, например SYSTEM_USER, возвращают имя входа, которое вызвало роль приложения.Built-in functions that return login names, such as SYSTEM_USER, return the name of the login that invoked the application role. Встроенные функции, возвращающие имена пользователей базы данных, возвращают имя роли приложения.Built-in functions that return database user names return the name of the application role.

Принцип минимальных привилегийThe Principle of Least Privilege

Ролям приложений следует предоставлять только необходимые разрешения на случай, если пароль будет раскрыт.Application roles should be granted only required permissions in case the password is compromised. Разрешения роли public необходимо отменить во всех базах данных, использующих роль приложения.Permissions to the public role should be revoked in any database using an application role. Отключите учетную запись guest во всех базах данных, к которым не следует предоставлять доступ участникам роли приложения.Disable the guest account in any database you do not want callers of the application role to have access to.

Расширения роли приложенияApplication Role Enhancements

Контекст выполнения после активации роли приложения можно переключить обратно на исходного участника, устранив тем самым необходимость отключения пула соединений.The execution context can be switched back to the original caller after activating an application role, removing the need to disable connection pooling. Хранимая процедура sp_setapprole получила новый параметр, создающий файл cookie, который содержит контекстные сведения об участнике.The sp_setapprole procedure has a new option that creates a cookie, which contains context information about the caller. Сеанс можно восстановить, вызвав процедуру sp_unsetapprole и передав ей этот файл cookie.You can revert the session by calling the sp_unsetapprole procedure, passing it the cookie.

Альтернативы ролям приложенийApplication Role Alternatives

Роли приложений зависят от безопасности пароля, который представляет собой потенциально уязвимое место системы безопасности.Application roles depend on the security of a password, which presents a potential security vulnerability. Пароли уязвимы в том случае, если они внедрены в код приложения или хранятся на диске.Passwords may be exposed by being embedded in application code or saved on disk.

Можно рассмотреть следующие альтернативные подходы.You may want to consider the following alternatives.

  • Используйте переключение контекста с помощью инструкции EXECUTE AS с предложениями NO REVERT и WITH COOKIE.Use context switching with the EXECUTE AS statement with its NO REVERT and WITH COOKIE clauses. В базе данных можно создать пользовательскую учетную запись, которая не сопоставлена с именем входа.You can create a user account in a database that is not mapped to a login. Этой учетной записи присваиваются разрешения.You then assign permissions to this account. Использование инструкции EXECUTE AS для пользователя, не имеющего имени входа, безопаснее, поскольку этот подход основан на разрешениях, а не на пароле.Using EXECUTE AS with a login-less user is more secure because it is permission-based, not password-based. Дополнительные сведения см. в разделе Настройка разрешений с олицетворением в SQL Server.For more information, see Customizing Permissions with Impersonation in SQL Server.

  • Подписывайте хранимые процедуры сертификатами, предоставляя разрешение только на выполнение этих процедур.Sign stored procedures with certificates, granting only permission to execute the procedures. Дополнительные сведения см. в разделе Подписывание хранимых процедур в SQL Server.For more information, see Signing Stored Procedures in SQL Server.

Внешние ресурсыExternal Resources

Дополнительные сведения см. в следующих ресурсах.For more information, see the following resources.

ResourceResource ОписаниеDescription
Роли приложенияApplication Roles Описывает процесс создания и использования ролей приложения в SQL Server 2008.Describes how to create and use application roles in SQL Server 2008.

См. такжеSee also