Поделиться через


Создание ролей приложения в SQL Server (ADO.NET)

Обновлен: November 2007

Роли приложения предоставляют возможность назначать разрешения приложению, а не ролям базы данных или пользователям. Пользователи могут соединиться с базой данных, активировать роль приложения и воспользоваться разрешениями, предоставленными приложению. Разрешения, предоставленные роли приложения, действуют в течение всего соединения.

Bb669062.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Роли приложения активируются, когда клиентское приложение передает имя роли приложения и пароль в строке соединения. В двухуровневом приложении безопасность при этом снижается, поскольку пароль должен храниться на клиентском компьютере. В трехуровневом приложении пароль можно хранить так, чтобы он не был доступен пользователям приложения.

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

Роли приложения имеют следующие функции.

  • В отличие от ролей базы данных роли приложения не содержат элементов.

  • Роли приложения активируются, когда клиентское приложение передает имя и пароль роли приложения системной хранимой процедуре sp_setapprole.

  • Пароль должен храниться на клиентском компьютере и передаваться во время выполнения. Роль приложения нельзя активировать из SQL Server.

  • Пароль не зашифрован. Начиная с SQL Server 2005, при сохранении пароля используется одностороннее хэширование.

  • После активации разрешения, полученные через роль приложения, действуют в течение всего соединения.

  • В SQL Server 2000 нельзя переключить контекст выполнения обратно на исходного участника. Поэтому для использования ролей приложения необходимо отключить пулы соединений. Дополнительные сведения см. в разделе Организация пулов соединений SQL Server (ADO.NET).

  • Роль приложения наследует разрешения, предоставленные роли public.

  • Если роль приложения активирует член предопределенной роли сервера sysadmin, контекст безопасности переключается на контекст безопасности роли приложения на все время соединения.

  • Если создать учетную запись guest в базе данных, в которой имеется роль приложения, то не нужно будет создавать учетную запись для роли приложения или для любого имени входа, вызывающего эту роль. Роли приложения могут получать прямой доступ к другой базе данных, только если во второй базе данных существует учетная запись guest.

  • Встроенные функции, возвращающие имена входа, например SYSTEM_USER, возвращают имя входа, которое вызвало роль приложения. Встроенные функции, возвращающие имена пользователей базы данных, возвращают имя роли приложения.

Принцип минимальных привилегий

Ролям приложений следует предоставлять только необходимые разрешения на случай, если пароль будет раскрыт. Разрешения роли public необходимо отменить во всех базах данных, использующих роль приложения. Отключите учетную запись guest во всех базах данных, к которым не следует предоставлять доступ участникам роли приложения.

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

Начиная с версии SQL Server 2005, контекст выполнения может переключаться обратно на исходного участника после активации роли приложения, устраняя тем самым необходимость отключения пула соединений. Хранимая процедура sp_setapprole получила новый параметр, создающий файл cookie, который содержит контекстные сведения об участнике. Сеанс можно восстановить, вызвав процедуру sp_unsetapprole и передав ей этот файл cookie.

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

Роли приложений зависят от безопасности пароля, который представляет собой потенциально уязвимое место системы безопасности. Пароли уязвимы в том случае, если они внедрены в код приложения или хранятся на диске.

Для версии SQL Server 2005 и старше можно рассмотреть следующие альтернативные подходы.

  • Используйте переключение контекста с помощью инструкции EXECUTE AS с предложениями NO REVERT и WITH COOKIE. В базе данных можно создать пользовательскую учетную запись, которая не сопоставлена с именем входа. Этой учетной записи присваиваются разрешения. Использование инструкции EXECUTE AS для пользователя, не имеющего имени входа, безопаснее, поскольку этот подход основан на разрешениях, а не на пароле. Дополнительные сведения см. в разделе Настройка разрешений с олицетворением в SQL Server (ADO.NET).

  • Подписывайте хранимые процедуры сертификатами, предоставляя разрешение только на выполнение этих процедур. Дополнительные сведения см. в разделе Подписывание хранимых процедур в SQL Server (ADO.NET).

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

Дополнительные сведения см. в следующих ресурсах.

Ресурс

Описание

Роли приложения в электронной документации по SQL Server 2008

Описывает процесс создания и использования ролей приложения в SQL Server 2008.

Роли приложения в электронной документации по SQL Server 2005

Описывает процесс создания и использования ролей приложения в SQL Server 2005.

Обеспечение безопасности приложений и ролей приложения в электронной документации по SQL Server 2000

Описывает процесс создания и использования ролей приложения в SQL Server 2000.

См. также

Основные понятия

Сценарии защиты приложений в SQL Server (ADO.NET)

Другие ресурсы

Защита приложений ADO.NET

Общие сведения о безопасности SQL Server (ADO.NET)