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;初期カタログ=ステージ;ユーザー=myuser;

アカウントmyuserは、publicおよびsysadmin SQL Serverロールで構成され、masterおよびmsdbにdboがあります。なぜこれが起こっているのかについて、誰かが洞察や手がかりを提供できますか?

4

1 に答える 1

0

これは仕様によるものです。OLE DBやADOとは異なり、SqlConnection.ConnectionStringによって返される接続文字列は、ユーザーが設定したConnectionStringと同じですが、Persist Security Info値がfalse(デフォルト)に設定されている場合はセキュリティ情報を差し引いたものです。.NET Framework Data Provider for SQL Serverは、[セキュリティ情報の永続化]をtrueに設定しない限り、接続文字列でパスワードを永続化または返しません。

マイクロソフトでは、永続的なセキュリティ情報をfalseのままにしておくことを強くお勧めします。接続時にユーザーIDとパスワードを指定する場合、その情報を使用して接続を開き、破棄すると、最も保護されます。これは、信頼できないソースへのオープン接続を提供する場合、または接続情報をディスクに永続化する場合に特に重要です。Persist Security Infoをfalseのままにしておくと、信頼できないソースが接続のセキュリティに敏感な情報にアクセスできないようにし、接続文字列情報とともにセキュリティに敏感な情報がディスクに永続化されないようにするのに役立ちます。

于 2012-04-22T18:16:09.007 に答える