База данных + Аутентификация Windows + Имя пользователя / Пароль? - PullRequest
20 голосов
/ 06 мая 2009

Я всегда думал, что для подключения к SQL-серверу с использованием проверки подлинности Windows с явно указанными учетными данными, вы должны LogonUser, Impersonate, а затем подключиться.

Мне кажется, что эта ссылка предполагает, что можно подключиться к серверу SQL без всего этого, просто указав в строке подключения "uid = ...; pwd = ...". Я проверил этот метод только для того, чтобы убедиться, что он не работает, и - о чудо - он не работает. Если бы этот пост в блоге не был на msdn.com, я бы просто отклонил его как разговор Нуба, но это так.

Кто-нибудь имеет представление, что мне не хватает?

РЕДАКТИРОВАТЬ1: Многие респонденты неправильно поняли то, что я имел в виду. Вот копия / вставка того, о чем я говорил. Это не интегрированный SQL, и это не олицетворение ASP.NET, созданное IIS:

string sql4 = String.Format(
   @"Data Source={0};Integrated Security=SSPI;uid=<uid>;pwd=<pid>", server);     
// Database + Windows Authentication + Username/Password

Ответы [ 7 ]

28 голосов
/ 07 мая 2009

Существует два разных типа безопасности с SQL Server. «Аутентификация Windows» и «Аутентификация SQL Server». Когда вы видите UID и PWD, вы видите последнее. В данном случае uid не является субъектом Windows - ОС ничего об этом не знает.

Итак, ответ на ваш вопрос: нет , вы не можете передать имя пользователя и пароль Windows в строке подключения для входа на SQL Server.

4 голосов
/ 06 мая 2009

Это зависит - если вы подключаетесь из командной строки или приложения Winforms ПРЯМО к вашему SQL-серверу, вы ЛИБО указываете «Integrated Security = SSPI;» а затем используйте свои учетные данные Windows в качестве учетных данных для входа в систему, ИЛИ вы указываете "user id = ....; pwd = ....." - но тогда это вход в систему SQL - НЕ ваш вход в Windows.

Вы упомянули «подражать, а затем подключиться» - что, похоже, указывает на ASP.NET - это опять совершенно другая история. Если вы олицетворяете, то вы в основном используете свои учетные данные Windows, например, веб-сервер будет «выдавать себя за вас» и будет входить в систему как вы (используя свои учетные данные Windows). В этом случае, опять же, не нужно указывать «uid = ....; pwd = .....» (если это так, оно будет игнорироваться).

Как ясно показывает эта ссылка, которую вы упомянули - если вы можете подключиться напрямую и указать «Integrated Security = SSPI;», то это имеет приоритет над любым uid = ...; pwd = ...., который вы также можете указан и входит в систему с использованием ваших учетных данных Windows; эти дополнительные uid = ...; pwd = .... части игнорируются.

Марк

2 голосов
/ 06 мая 2009

Статья и рассматриваемый вопрос касаются безопасности SQL, а не интегрированной безопасности. Вы можете передать учетные данные для пользователя SQL и войти таким образом, если включена аутентификация SQL (смешанный режим). Если сервер SQL настроен на использование только встроенной защиты, это не будет работать. Также не будет разрешено входить с использованием учетных данных для входа в Windows.

1 голос
/ 07 июля 2015

Это очень старый, но, возможно, у кого-то такая же проблема.

Вы можете подключиться, используя WindowsAuthentication и , указав идентификатор пользователя и пароль в строке подключения , но не на каждом устройстве. Вы можете добиться этого, например, на устройствах WinCE (https://technet.microsoft.com/en-us/library/aa275613(v=sql.80).aspx).

Я не знаю, можете ли вы сделать то же самое в других ОС только с помощью строки подключения (без выполнения олицетворения).

Надеюсь, это поможет.

1 голос
/ 14 ноября 2014

Да, как вы говорите, статья упоминает это:

string sql4 = String.Format(@"Data Source={0};Integrated Security=SSPI;uid=<uid>;pwd=<pid>", server);     // Database + Windows Authentication + Username/Password

Но если вы внимательно прочитаете несколько строк спустя, это говорит:

string sql4 -> Вход в систему с помощью входа в Windows, т.е. имеет приоритет перед именем пользователя / паролем.

:)

1 голос
/ 07 мая 2009

В нашем магазине мы обычно используем строки подключения, как вы описали. Без проблем. Но база данных вашего сервера sql должна быть настроена на использование безопасности sql, а не проверки подлинности Windows.

Пример строки подключения (из web.config) в нашем приложении выглядит следующим образом:

<connectionStrings>
<add name="ConfigurationData" connectionString="server=DevServer;
database=travel_expense_management_dv;uid=userid;pwd=password!;"
providerName="System.Data.SqlClient" />
</connectionStrings>

С другой стороны, гуру DBA для нашего магазина настроил мне персональную базу данных на главном сервере, которая интегрировала безопасность с моим входом в Windows. Мне не нужны были uid и pwd, потому что они взяли мою аутентификационную информацию из контекста.

0 голосов
/ 30 марта 2016

просто вклад также для тех, кто все еще сталкивался с такой проблемой. Исходя из моего опыта, если вы не указали ни одного пользователя / пароля при подключении, он автоматически подключится к базе данных с использованием аутентификации Windows. Это означает, что он получит идентификатор пользователя и учетные данные пользователя, который вошел в систему на компьютере. Система позволит вам подключиться к базе данных, если она идентифицирует, что ваш идентификатор пользователя существует / создан в базе данных. Но как только вы указали свой идентификатор пользователя и пароль в своем подключении, оно обойдёт проверку подлинности Windows и вместо этого будет использовать проверку подлинности сервера SQL.

...