Почему Smo.Agent.JobServer меняет строку подключения SQL?

Привет, я заметил какое-то странное поведение при использовании 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);

Результатом этого является Источник данных = мой сервер; Исходный каталог = Этап; пользователь = мой пользователь; пароль = abc; Источник данных=myserver;Исходный каталог=Stage;user=myuser;

Учетная запись myuser настроена с ролями SQL Server public и sysadmin и имеет dbo на master и msdb. Может ли кто-нибудь дать какое-либо представление или подсказки относительно того, почему это происходит?


person blue18hutthutt    schedule 22.04.2012    source источник


Ответы (1)


Это по дизайну. В отличие от OLE DB или ADO, строка подключения, возвращаемая SqlConnection.ConnectionString — это то же самое, что и строка ConnectionString, заданная пользователем, за вычетом сведений о безопасности, если для параметра Persist Security Info установлено значение false (по умолчанию). Поставщик данных .NET Framework для SQL Server не сохраняет и не возвращает пароль в строке подключения, если для параметра «Постоянная информация о безопасности» не задано значение true.

Microsoft настоятельно рекомендует сохранять информацию о безопасности как ложный. Если вы предоставляете идентификатор пользователя и пароль при установлении соединения, вы наиболее защищены, если эта информация используется для открытия соединения, а затем отбрасывается. Это особенно важно, если вы предоставляете открытое соединение с ненадежным источником или сохраняете информацию о соединении на диске. Сохранение Persist Security Info со значением false помогает гарантировать, что ненадежный источник не имеет доступа к конфиденциальной информации для вашего подключения, а также помогает гарантировать, что никакая конфиденциальная информация не будет сохранена на диске с вашей строкой подключения.

person Anthony Faull    schedule 22.04.2012
comment
Спасибо, что разъяснили это. - person blue18hutthutt; 23.04.2012