我有一個使用System.Data.SqlCommand執行參數化MS SQL Server存儲過程的.NET Web服務應用程序。應用程序從用戶輸入中接收存儲過程的名稱及其參數。使用.NET SqlCommand運行帶有EXECUTE AS語句的t-sql存儲過程
此外,應用程序部署在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請求。
爲什麼當你創建SQL連接對象不指定連接字符串中的用戶名的人,你會執行它爲用戶這樣 –
使用''Windows Authentication'「連接到SQL Server而不是''sa''用戶。 –
我無法在連接字符串中指定用戶憑證,因爲我沒有它們。我只有'域\用戶'格式的用戶名。沒有密碼。 – prot