26

明示的に指定された資格情報を使用して Windows 認証を使用して SQL サーバーに接続するには、LogonUser、Impersonate、および接続する必要があると常に考えていました。

このリンクは、接続文字列で「uid=...;pwd=...」を指定するだけで、このような手間をかけずに SQL サーバーに接続できることを示唆しているように思えます。私はこの方法が機能しないことを確認するためにテストしましたが、実際には機能しませんでした。そのブログ投稿が msdn.com になかったら、初心者向けの話として片付けていたでしょうが、そうです。

何が欠けているのか誰にも分かりますか?

EDIT1:多くの回答者が、私が言及していることを誤解していました。これは、私が話していたことのコピー/貼り付けです。これ統合 SQL ではなく、IIS によって作成された ASP.NET の偽装でもありません。

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

7 に答える 7

38

SQL Server には 2 種類のセキュリティがあります。「Windows 認証」と「SQL Server 認証」です。uid と pwd が表示されている場合は、後者が表示されています。この場合の uid は Windows プリンシパルではありません。OS はそれについて何も知りません。

したがって、質問に対する答えは「いいえ」です。Windows のユーザー名とパスワードを接続文字列に渡して SQL Server にログインすることはできません。

于 2009-05-06T22:35:23.650 に答える
5

コマンドラインまたはWinformsアプリからSQLServerに直接接続する場合は、「Integrated Security=SSPI;」を指定する必要があります。次に、Windowsクレデンシャルをログオンクレデンシャルとして使用するか、「user id = ....; pwd = .....」を指定します。ただし、これはSQLログオンであり、Windowsログオンではありません。

「偽装してから接続する」とおっしゃっていますが、これはASP.NETを示しているようですが、これもまったく別の話です。偽装する場合は、基本的にWindowsクレデンシャルを使用しています。たとえば、Webサーバーが「偽装」し、(Windowsクレデンシャルを使用して)ログオンします。その場合も、「uid = ....; pwd = .....」を指定する必要はありません(指定した場合は無視されます)。

あなたが言及したそのリンクが明確に示しているように、直接接続でき、「Integrated Security = SSPI;」を指定すると、これは、指定してログに記録する可能性のあるuid = ...; pwd=....よりも優先されます。 Windowsクレデンシャルを使用する場合。それらの余分なuid=...; pwd=....の部分は無視されます。

マーク

于 2009-05-06T18:16:14.040 に答える
2

この記事と問題点は、統合セキュリティではなく、SQL セキュリティに関するものです。SQL 認証 (混合モード) が有効になっている場合は、SQL ユーザーの資格情報を渡し、この方法でログインできます。SQL サーバーが統合セキュリティのみを使用するように設定されている場合、これは機能しません。また、Windows ログオン資格情報を使用したログインを許可することもできません。

于 2009-05-06T19:18:23.250 に答える
1

当店では、ご指摘のような接続文字列を日常的に使用しています。問題ありません。ただし、SQL Server データベースは、Windows 認証ではなく、SQL セキュリティを使用するように設定する必要があります。

アプリのサンプル接続文字列 (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 は必要ありませんでした。

于 2009-05-06T22:49:08.920 に答える
1

はい、あなたが言うように、記事はこれに言及しています:

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

しかし、後で数行を注意深く読むと、次のように書かれています。

string sql4 -> Windows ログインでログインします。ユーザー名/パスワードよりも優先されます。

:)

于 2014-11-14T14:42:20.193 に答える