База данных + проверка подлинности Windows + имя пользователя / пароль?

Я всегда думал, что для подключения к 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

person galets    schedule 06.05.2009    source источник
comment
это, вероятно, для входа в систему sql server.   -  person DForck42    schedule 06.05.2009
comment
ЦИТАТА: строка sql4 = String.Format (@Data Source = {0}; Integrated Security = SSPI; uid = ‹uid›; pwd = ‹pid›, server); // База данных + проверка подлинности Windows + имя пользователя / пароль   -  person galets    schedule 07.05.2009
comment
Я считаю, что когда указаны встроенная безопасность (проверка подлинности Windows) и имя пользователя / пароль, тогда встроенная безопасность имеет приоритет.   -  person schmiddy98    schedule 14.05.2021


Ответы (7)


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

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

person John Saunders    schedule 06.05.2009
comment
Integrated Security = SSPI [указывает NT auth]; uid = ‹uid›; pwd = ‹pid› [указывает sql auth] - оба параметра в одной строке, зачем им использовать его в этом примере? - person galets; 08.05.2009
comment
Это не пример. Это статья. Прочтите статью, и вы все поймете. - person John Saunders; 08.05.2009

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

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

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

Марк

person marc_s    schedule 06.05.2009

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

person BlackWasp    schedule 06.05.2009

В нашем магазине мы обычно используем строки подключения, как вы описали. Без проблем. Но ваша база данных sql server должна быть настроена для использования безопасности 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>

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

person Cyberherbalist    schedule 06.05.2009

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

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

Но если вы внимательно прочитаете несколько строк позже, там будет сказано следующее:

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

:)

person Jagan    schedule 14.11.2014

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

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

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

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

person Alejandro    schedule 06.07.2015

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

person elena    schedule 30.03.2016