2012-04-22 51 views
0

嗨我注意到一些奇怪的行为,而使用SMO,并想知道是否有人可以提供一些洞察到这一点;当我第一次调用Server.JobServer属性时(在这种情况下,仅仅调用可能懒惰的.ToString()在后台初始化它),我发现它影响了我的SQL连接字符串 - 特别是密码已经消失了!Smo.Agent.JobServer为什么更改我的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); 

从这个输出是 数据源= MYSERVER;初始目录=阶段;用户= myuser的;口令= ABC; Data Source = myserver; Initial Catalog = Stage; user = myuser;

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

回答

0

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

Microsoft strongly recommends Persist Security Info保留为false。如果您在建立连接时提供用户标识和密码,那么如果使用该信息打开连接并丢弃,则会受到最大的保护。如果您向不受信任的源提供开放连接或将连接信息持久保存到磁盘,这一点尤其重要。将持久安全信息保留为假有助于确保不受信任的源无法访问您的连接的安全敏感信息,并且还有助于确保没有安全敏感信息持久存储以连接字符串信息。

+0

谢谢你澄清这一点。 – blue18hutthutt 2012-04-23 14:25:14