Выполнить хранимую процедуру как другой логин
В нашем продукте запущено несколько заданий агента SQL. Но мы хотим покончить с агентом SQL-сервера, чтобы мы могли использовать Sql server express. Поэтому я пишу наш собственный сервис для выполнения хранимых процедур, которые в данный момент выполняются как задания. Все остальное, кроме "Владельца", может быть легко скопировано. Насколько я понимаю, когда вы указываете владельца в агенте SQL-сервера, задания запускаются в этом контексте входа в систему. Я использую класс SqlCommand из.NET для запуска хранимых процедур. Но этот класс не поддерживает предоставление другого контекста входа. Есть ли другой способ, с помощью которого я могу указать другой логин для работы, как позволяет агент SQL Server?
Заранее спасибо, -Нил.
2 ответа
Если вы не хотите использовать текущее соединение для запуска хранимой процедуры из кода, то сначала создайте пользователя на сервере sql и используйте его для выполнения хранимой процедуры.
SQlCommand принимает соединение в качестве параметра, который содержит информацию о владельце. Вам нужно будет явно создать новое соединение с новым пользователем и использовать его для запуска вашего SP.
Ты можешь использовать EXECUTE AS
Команда в вашей хранимой процедуре для выполнения от имени другого пользователя, которая передается в качестве параметра:
create procedure testing
(@username nvarchar(100))
as
execute as user = @username;
select USER_NAME(); -- this is just to test the current user name, remove it later
-- your code goes here
revert;
Вы можете прочитать больше об этом и о необходимых разрешениях здесь: http://msdn.microsoft.com/en-us/library/ms181362.aspx