【问题标题】:Password problems with SqlConnectionSqlConnection 的密码问题
【发布时间】:2016-04-17 21:25:32
【问题描述】:

我这样创建连接字符串:

var connectionString = "Data Source=MyPC\\SQLExpress;Initial Catalog=TestDb;Integrated Security=false;User Id=TestUser;password=TestPwd" 

我这样创建一个 SQL 连接:

var sqlConnection = new SqlConnection(connectionString);

然后我像这样创建我的 SqlBulkCopy 对象:

var bulkData = new SqlBulkCopy(sqlConnection.ConnectionString, SqlBulkCopyOptions.KeepIdentity);

问题是我在尝试执行大容量复制时收到错误 18456,状态 8 错误消息。此错误表示密码不匹配。然而,我可以使用上面提供的确切凭据登录数据库。

所以,我单步执行我的程序并注意到这一点:连接字符串,在调试中,看起来像它应该的那样,带有用户 ID 和密码。但是,当我将光标悬停在大容量副本的sqlConnection.ConnectionString 上时,它会显示整个连接字符串而没有密码。它只有用户!出于某种原因,当我使用其中包含密码的连接字符串创建 SQL 连接时,似乎没有使用我的密码。所以,凭直觉,我将代码更改为如下所示:

var bulkData = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity);

而且效果很好!所以,我的问题是,为什么当我创建带有密码的连接字符串的 SQL 连接时,密码不包含在生成的 SQL 连接的 ConnectionString 属性中?

【问题讨论】:

  • 我确定这是一个安全问题——内存中的密码可能是一个安全漏洞。

标签: c# connection-string sqlconnection


【解决方案1】:

除非您在连接字符串中包含 Persist Security Info = True,否则出于安全原因,SqlConnection 将删除密码。

【讨论】:

  • 啊,谢谢!计时器一到,我就会将此标记为答案。
猜你喜欢
  • 2010-12-16
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
相关资源
最近更新 更多