Подтвердить что ты не робот

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

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

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

Кто-нибудь знает, что мне не хватает?

EDIT1: Многие респонденты неправильно поняли, о чем я говорю. Вот копия/вставка того, о чем я говорил. Он не интегрировал SQL, а также олицетворение ASP.NET, выполненное IIS:

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

Ответ 1

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

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

Ответ 2

Это зависит - если вы подключаетесь из командной строки или приложения Winforms DIRECTLY на ваш SQL Server, вы также указываете "Integrated Security = SSPI"; а затем использовать ваши учетные данные Windows в качестве учетных данных для входа в систему, или вы укажете "user id =....; pwd =....." - но это значит, что SQL-вход - не ваш вход в систему Windows.

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

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

Марк

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

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

:)

Ответ 6

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

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

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

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

Ответ 7

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