統合セキュリティを使用する2つのアプリがあります。一方は接続文字列にIntegrated Security = true
を割り当て、もう一方はIntegrated Security = SSPI
を設定します。
統合セキュリティの観点から見たSSPI
とtrue
の違いは何ですか?
Microsoftによると 彼らは同じことです。
false
の場合、接続にユーザーIDとパスワードが指定されています。 trueの場合、現在のWindowsアカウントの認証情報が認証に使用されます。
認識される値はtrue
、false
、yes
、no
、およびsspi
(強く推奨)で、これはtrue
と同等です。
Integrated Security=true;
はすべてのSQLプロバイダで機能するわけではありません。OleDb
プロバイダとともに使用すると例外がスローされます。
そのため、基本的にIntegrated Security=SSPI;
がSQLClient
とOleDB
の両方のプロバイダで動作するので好まれます。
これは MSDN - 接続文字列構文(ADO.NET) に従った構文のフルセットです。
Windows認証の使用
データベースサーバーに接続するには、一般に統合セキュリティと呼ばれるWindows認証を使用することをお勧めします。 Windows認証を指定するには、データプロバイダで次の2つのキーと値のペアのいずれかを使用できます。 SQL Server用の.NET Framework
Integrated Security = true;
Integrated Security = SSPI;
ただし、データプロバイダ.NET Framework OleDbで動作するのは2番目だけです。 ConnectionStringにIntegrated Security = true
を設定した場合は、例外がスローされます。
データプロバイダでWindows認証を指定します。 ODBC用のNET Frameworkでは、次のキーと値のペアを使用する必要があります。
Trusted_Connection = yes;
ソース: MSDN:接続文字列の使用
SqlConnection
:)の実際のコードを見るために.Net Reflector
を使った場合、多くの質問に答えが出ます:true
とsspi
は同じです。
internal class DbConnectionOptions
...
internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
{
return true;
}
}
...
EDIT 20.02.2018 .Net Coreで、githubでオープンソースを見ることができます。 ConvertValueToIntegratedSecurityInternalメソッドを検索します。
Integrated Security = False:接続にユーザーIDとパスワードが指定されています。 Integrated Security = true:現在のWindowsアカウント認証情報が認証に使用されます。
統合セキュリティ= SSPI:これはtrueと同等です。
接続文字列からユーザー名とパスワードの属性を避けて統合セキュリティを使用できます。
Integrated Security = false
から始めましょう
false
ユーザーIDとパスワードが接続文字列で指定されています。true
Windowsアカウントの認証情報が認証に使用されます。
認識される値はtrue
、false
、yes
、no
、およびSSPI
です。
User ID
およびPassword
が指定され、Integrated Securityがtrue
に設定されている場合、User ID
およびPassword
は無視され、統合セキュリティが使用されます
接続文字列は、データに接続している what および how に固有のものです。これらは同じデータベースに接続していますが、最初はSQL Server用の.NET Frameworkデータプロバイダーを使用しています。 Integrated Security = TrueはOleDbでは機能しません。
疑問がある場合は、Visual Studioサーバーエクスプローラのデータ接続を使用してください。
Trueは.NET SqlClientライブラリを使用している場合にのみ有効です。 OLEDBを使用している場合は無効です。どちらもSSPIが有効な場合は、.net SqlClientライブラリまたはOLEDBを使用しています。
私の視点で、
Integrated security = SSPIを使用しない場合は、接続文字列にユーザー名とパスワードをハードコードする必要があります。これは、 "比較的安全でない"ことを意味します。