Выполнить хранимую процедуру как другой логин

В нашем продукте запущено несколько заданий агента 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

Другие вопросы по тегам