幸运的是,这是在UAT而不是生产。
UAT服务器是运行SQL Server 2012和Windows Server 2012的Azure VM。 在应用程序的一个页面上,我收到错误
用户'用户'登录失败。在System.Data.SqlClient.SqlInternalConnection
Microsoft.ApplicationBlocks.Data.SqlHelperParameterCache.GetSpParameterSetInternal(SqlConnection连接,String spName,Boolean includeReturnValueParameter)
在Microsoft.ApplicationBlocks.Data.SqlHelperParameterCache.GetSpParameterSet(String connectionString,String spName,Boolean includeReturnValueParameter)
在Microsoft.ApplicationBlocks.Data.SqlHelperParameterCache.GetSpParameterSet(String connectionString,String spName)
登录是SQL Server登录,而不是域登录
在SAME网页上,还有另外3个存储过程调用,这些调用是在此存储过程开始之前使用相同的连接字符串对同一个数据库进行的调用
我已经删除并重新创建了存储过程
我已经删除并重新创建了数据库登录
该帐户是数据库角色的成员,该角色授予它对此存储过程所属的架构的EXECUTE权限
如果我以此用户身份登录SSMS,我可以:
我在SQL Server上设置了另一个Web服务器,它使用连接字符串中的域登录,运行没有问题。我们正在尝试弃用该网站的SQL Server版本。
任何人都可以提出可能导致此问题的建议,以及如何解决这个问题?
答案 0 :(得分:2)
感谢.NET SqlClient安全行为。 通过数据应用程序块进行工作调用
return SqlHelper.ExecuteReader(ConnectionString, sql_OutboundQueue_TypeAndStatusCount, DBUtility.GetNull(since));
这链接到调用SqlHelperParameterCache.GetSpParameterSet
通过数据应用程序块进行失败调用
SqlConnection con = new SqlConnection(QueueDataProvider.ConnectionString);
SqlCommand cmd = new SqlCommand(QueueDataProvider.OutboundQueue.sql_OutboundQueue_Search, con);
con.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(SqlHelperParameterCache.GetSpParameterSet(con.ConnectionString, cmd.CommandText));
原因: 如果您使用SQL登录,con.ConnectionString已清除密码,但仅在您调用con.Open后清除