【发布时间】: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