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.
8.6 Изменение контекста выполнения. Выражение EXECUTE AS
Новая возможность SQL Server 2005/2008 — изменение контекста выполнения команд Transact-SQL. Например, вы подключились от имени пользователя, у которого нет прав на определенную таблицу. Но в то же время вы обладаете правом выступать от имени другого пользователя, у которого права на эту таблицу есть (право действовать от имени другого пользователя называется IMPERSONATE). Вместо того чтобы разрывать соединение с SQL Server и входить заново от имени второго пользователя, вы можете просто "превратиться" во второго пользователя при помощи выражения EXECUTE AS и выполнить необходимые запросы к таблице от имени этого пользователя и с его правами, а потом, при желании, вернуться обратно.
В принципе, возможность менять контекст выполнения была и в предыдущих версиях SQL Server. Она представлялась командой SETUSER (для обратной совместимости эта команда сохранена и в SQL Server 2005/2008). Однако возможностей у EXECUTE AS намного больше:
команда SETUSER позволяла менять контекст выполнения только пользователям с правами системного администратора (на уровне сервера) или dbo (на уровне базы данных). Поскольку прав у этих пользователей и так всегда достаточно, то обычно команда SETUSER применялась только для проверки, как та или иная команда будет выполняться от имени определенного пользователя. Выражение EXECUTE AS могут использовать любые пользователи, поэтому основное назначение этого выражения — "подключение" пользователю дополнительных прав на время выполнения определенных команд;
выражение EXECUTE AS, в отличие от команды SETUSER, позволяет возвращаться "обратно" — к исходной учетной записи, которая использовалась до смены контекста выполнения. Для этого используется команда REVERT. При этом с помощью EXECUTE AS вы вполне можете поменять контекст выполнения несколько раз. Каждая выполненная команда REVERT вернет контекст выполнения на один "уровень" назад.
Работа с выражением EXECUTE AS очень проста. Предположим, что у вас есть пользователь базы данных User1, у которого нет прав на таблицу Table2, и пользователь User2, у которого такие права есть. До начала применения команды EXECUTE AS необходимо предоставить пользователю User1 право IMPERSONATE на объект пользователя User2, чтобы он получил возможность выполнять команды от имени этого пользователя. На графическом экране это можно сделать так:
откройте свойства пользователя User1 в Management Studio и перейдите на вкладку Securables;
нажмите кнопку Add под списком Securables, в открывшемся окне установите переключатель в положение All objects of the types (Все объекты типа) и нажмите кнопку OK;
в списке типов объектов выберите Users и нажмите кнопку OK;
в загруженном списке пользователей выберите пользователя User2 и установите для него флажок в столбце Grant напротив разрешения IMPERSONATE.
Соответствующая команда Transact-SQL может выглядеть так:
Достарыңызбен бөлісу: |