0

嗨,我在使用 SMO 时注意到一些奇怪的行为,想知道是否有人可以对此提供一些见解;当我第一次调用 Server.JobServer 属性时(在这种情况下,仅调用 .ToString() 可能会在后台延迟初始化它)我发现它影响了我的 SQL 连接字符串 - 特别是密码已经消失了!

下面是我用来产生这种行为的代码:

SqlConnection conn = new SqlConnection(@"Data Source=myserver;Initial Catalog=Stage;user=myuser;password=abc;");
ServerConnection serverConn = new ServerConnection(conn);
Server server = new Server(serverConn);
Console.WriteLine(conn.ConnectionString);
server.JobServer.ToString();
Console.WriteLine(conn.ConnectionString);

输出是 Data Source=myserver;Initial Catalog=Stage;user=myuser;password=abc; 数据源=myserver;初始目录=Stage;用户=myuser;

帐户 myuser 配置了 public 和 sysadmin SQL Server 角色,并且在 master 和 msdb 上具有 dbo。任何人都可以提供有关为什么会发生这种情况的任何见解或线索吗?

4

1 回答 1

0

这是设计使然。与 OLE DB 或 ADO 不同, SqlConnection.ConnectionString返回的连接字符串与用户设置的 ConnectionString 相同,如果 Persist Security Info 值设置为 false(默认),则减去安全信息。除非将 Persist Security Info 设置为 true,否则用于 SQL Server 的 .NET Framework 数据提供程序不会在连接字符串中保留或返回密码。

Microsoft强烈建议将 Persist Security Info 保留为 false。如果您在建立连接时提供了用户 ID 和密码,那么如果该信息用于打开连接然后被丢弃,您将受到最大程度的保护。如果您要向不受信任的源提供开放连接或将连接信息持久保存到磁盘,这一点尤其重要。将 Persist Security Info 保持为 false 有助于确保不受信任的源无法访问您的连接的安全敏感信息,还有助于确保没有安全敏感信息与您的连接字符串信息一起保存到磁盘。

于 2012-04-22T18:16:09.007 回答