Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 execute as...  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Доброго времени суток!

СУБД: Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Действующие лица спектакля:
User_TechPod - сотрудник тех подддержки которые должен уметь менять пароль не имея прав securityadmin
testik - пользователю которому меняют пароль
UserWithSecurityAdmin - пользователь с правами securityadmin

Задача:
Надо дать пользователю: User_TechPod права на запуск процедуры(ChangePass), которая меняет пароль пользователя
Причем сам User_TechPod не должен иметь права securityadmin а просто пава на выполнение процедуры ChangePass

Тело процы ChangePass:
CREATE  PROCEDURE ChangePass
WITH EXECUTE AS 'UserWithSecurityAdmin'
as
ALTER LOGIN  [testik]  WITH PASSWORD = N'1234567891011' 


Итого когда User_TechPod запускает ChangePass, то получает ошибку:
Cannot alter the login 'testik', because it does not exist or you do not have permission.

Почему User_TechPod не может поменять пароль?
19 ноя 13, 16:43    [15155889]     Ответить | Цитировать Сообщить модератору
 Re: execute as...  [new]
o-o
Guest
потому что в процедуре можно имперсонэйтить только юзера, а не логин.
смотрите статью в БОЛ EXECUTE AS Clause (Transact-SQL):

Functions (except inline table-valued functions), Stored Procedures, and DML Triggers
{ EXEC | EXECUTE } AS { CALLER | SELF | OWNER | 'user_name' }

DDL Triggers with Database Scope
{ EXEC | EXECUTE } AS { CALLER | SELF | 'user_name' }

DDL Triggers with Server Scope and logon triggers
{ EXEC | EXECUTE } AS { CALLER | SELF | 'login_name' }

Queues
{ EXEC | EXECUTE } AS { SELF | OWNER | 'user_name' }

-----------------------------------------------------------------
' user_name '
Specifies the statements inside the module execute in the context of the user specified in user_name. Permissions for any objects within the module are verified against user_name. user_name cannot be specified for DDL triggers with server scope or logon triggers. Use login_name instead.

user_name must exist in the current database and must be a singleton account. user_name cannot be a group, role, certificate, key, or built-in account, such as NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService, or NT AUTHORITY\LocalSystem.
-----------------------------------------------------------------
когда имерсонэйтите юзера, используя execute as в процедуре, процедура выполняется от имени юзера из базы,
не от имени (хотя бы и одноименного) логина.
потому что scope = database.
scope расширяется использованием TRUSTWORTHY на базу + AUTHENTICATE SERVER на овнера (грабли!!!!), или решается через сертификат.
вот отличная статья:
Giving Permissions through Stored Procedures
19 ноя 13, 17:36    [15156429]     Ответить | Цитировать Сообщить модератору
 Re: execute as...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Надо дать пользователю: User_TechPod права на запуск процедуры(ChangePass), которая меняет пароль пользователя


Пользователь User_TechPod пишет событие в очередь в виде постоянной таблички, которая разгребается джобом, или используется локальная очередь Service Broker.
19 ноя 13, 17:48    [15156539]     Ответить | Цитировать Сообщить модератору
 Re: execute as...  [new]
mag2000
Member

Откуда:
Сообщений: 182
andrew shalaev,

https://www.sql.ru/blogs/decolores/950
19 ноя 13, 18:34    [15156762]     Ответить | Цитировать Сообщить модератору
 Re: execute as...  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
mag2000,

Спасибо! Статья то что нужно!
25 ноя 13, 13:28    [15184983]     Ответить | Цитировать Сообщить модератору
 Re: execute as...  [new]
aleks2
Guest
andrew shalaev
mag2000,

Спасибо! Статья то что нужно!


Фуфло.
В ней не сказано, что выдача прав на запуск такой процедуры эквивалентно наделению пользователя правами securityadmin.

Нет смысла мучиться.
25 ноя 13, 13:36    [15185044]     Ответить | Цитировать Сообщить модератору
 Re: execute as...  [new]
o-o
Guest
aleks2,
а почему?
я вижу только минус, что процедура должна жить в мастере и пользователя придется в мастера же добавить.
это как-то выдаст права securityadmin-а?
процедуру же он не сможет менять, ее же надо будет каждый раз подписывать?

хотя по мне так да, указанная мной статья полнее, и там рассказано, как перетащить сертификат в пользовательскую базу,
нечего кого попало в мастер пускать
25 ноя 13, 14:40    [15185625]     Ответить | Цитировать Сообщить модератору
 Re: execute as...  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
andrew shalaev,

https://www.sql.ru/forum/981915/vopros-po-olicetvoreniu
25 ноя 13, 16:06    [15186359]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить