【发布时间】:2017-06-30 06:51:57
【问题描述】:
我有一个使用 System.Data.SqlCommand 执行参数化 MS SQL Server 存储过程的 .NET Web 服务应用程序。应用程序从用户输入中接收存储过程的名称及其参数。
同样是部署在 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用户。 -
我无法在连接字符串中指定用户凭据,因为我没有它们。我只有一个“域\用户”格式的用户名。没有密码。
-
如果你使用windows认证那为什么需要以用户身份执行?
-
那么为什么您需要“执行为”您的命令已经以使用连接的用户身份执行?!?
标签: c# .net sql-server stored-procedures sspi