2012-04-22 83 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