У меня есть приложение веб-службы .NET, которое выполняет параметризованные хранимые процедуры MS SQL Server с использованием System.Data.SqlCommand. Приложение получает имя хранимой процедуры и ее параметры из пользовательского ввода.
Также приложение развернуто в домене Windows AD и может получить имя удаленного пользователя с помощью аутентификации SSPI.
using (var con = new SqlConnection(connectionString)) {
using (var cmd = new SqlCommand(procedureName, con)) {
cmd.CommandType = CommandType.StoredProcedure;
foreach (var pair in pairs.AllKeys) {
cmd.Parameters.Add(new SqlParameter(pair, pairs[pair]));
}
con.Open();
using (var reader = cmd.ExecuteReader()) {
// processing results
}
}
}
Теперь я хочу выполнить хранимую процедуру с оператором EXECUTE AS.
use [db]
go
execute as user = 'domain\user' --execute as RemoteUser
exec [db].[stored_procdure] @param1=value1
Можно ли это сделать? Как я могу добавить EXECUTE AS в SqlCommand?
Я не хотел бы прибегать к коду, подверженному инъекции sql, и создавать запрос sql из строк, полученных от пользователя.
Windows Authentication
для подключения к SQL Server, а не пользователяsa
. - person Rand Random   schedule 30.06.2017