Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы АД.docx
Скачиваний:
16
Добавлен:
19.12.2018
Размер:
516.23 Кб
Скачать

13.Роли приложений. Изменение контекста выполнения. Выражение execute as.

Роли приложений (application roles) SQL Server 2005

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

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

  • затем пользователь выполняет хранимую процедуру sp_setapprole, чтобы активизировать указанную им роль приложения. При этом в базе данных он получает права этой роли приложения (и теряет свои текущие права);

  • после того, как необходимость в правах роли приложения закончилась, пользователь может опять переключиться на свою исходную учетную запись (sp_unsetapprole).

Создание роли приложения производится —из контейнера Имя_базы_данных | Security | Roles |  Application Roles. Назначить пользователей этой роли невозможно, зато ей нужно будет указать пароль, который будет использоваться при активизации. Команда Transact-SQL на создание роли приложения:

CREATE APPLICATION ROLE AppRole1 WITH PASSWORD = 'password';

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

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

-Объявляем переменную appCookie.

-Она потребуется для возвращения к исходным правам: DECLARE @appCookie varbinary(8000);

-Активизируем роль приложения: EXEC sp_setapprole 'AppRole1','password','none',TRUE,@appCookie OUTPUT;

- Проверяем: SELECT USER_NAME();

-Возвращаемся к исходным правам: EXEC sp_unsetapprole @appCookie;

-Проверяем еще раз: SELECT USER_NAME();

Можно и не возвращаться к исходным правам. Но если потребуется во время работы имени роли приложения обратиться к другой базе данных, вы не сможете получить в ней других прав, кроме прав, предоставленных для специального пользователя guest.

Изменение контекста выполнения. Выражение EXECUTE AS

Изменение контекста выполнения команд Transact-SQL. Например, вы подключились от имени пользователя, у которого нет прав на определенную таблицу. Но в то же время вы обладаете правом выступать от имени другого пользователя, у которого права на эту таблицу есть (право действовать от имени другого пользователя называется IMPERSONATE). Вместо того чтобы разрывать соединение с SQL Server и входить заново от имени второго пользователя, вы можете просто "превратиться" во второго пользователя при помощи выражения EXECUTE AS и выполнить необходимые запросы к таблице от имени этого пользователя и с его правами, а потом, при желании, вернуться обратно.

Возможности у EXECUTE AS:

  • Выражение EXECUTE AS могут использовать любые пользователи, поэтому основное назначение этого выражения — "подключение" пользователю дополнительных прав на время выполнения определенных команд;

  • позволяет возвращаться "обратно" — к исходной учетной записи, которая использовалась до смены контекста выполнения. Для этого используется команда REVERT.

Работа с выражением EXECUTE AS:

  • откройте свойства пользователя User1 в Management Studio и перейдите на вкладку Securables;

  • нажмите кнопку Add под списком Securables, в открывшемся окне установите переключатель в положение All objects of the types (Все объекты типа) и нажмите кнопку OK;

  • в списке типов объектов выберите Users и нажмите кнопку OK;

  • в загруженном списке пользователей выберите пользователя User2 и установите для него флажок в столбце Grant напротив разрешения IMPERSONATE.

Соответствующая команда Transact-SQL может выглядеть так:

GRANT IMPERSONATE ON USER::User2 TO User1;

После этого можно использовать возможности выражения EXECUTE AS так:

-Переключаемся в контекст выполнения User2: EXECUTE AS USER = 'User2';

-Обращаемся к таблице Table2: SELECT * FROM dbo.Table2;

-Возвращаемся в контекст выполнения User1: REVERT;

EXECUTE AS CALLER — все команды в хранимой процедуре или функции будут выполнены с правами текущего пользователя (при этом неважно, кто является владельцем этой хранимой процедуры или функции);

EXECUTE AS SELF — все команды в хранимой процедуре или функции будут выполняться от имени пользователя, который создает или изменяет данную процедуру или функцию.

EXECUTE AS OWNER — все команды хранимой процедуры или функции будут выполняться от имени ее текущего владельца.

Выражение EXECUTE AS можно использовать не только для изменения контекста выполнения на уровне базы данных, но и на уровне сервера (т. е. логинов). Для этого ключевое слово USER меняется на LOGIN, например: EXECUTE AS LOGIN = 'Login2'.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]