統合セキュリティ= Trueと統合セキュリティ= SSPIの違いは何ですか?
-
22-07-2019 - |
質問
統合セキュリティを使用する2つのアプリがあります。 1つは接続文字列に Integrated Security = true
を割り当て、もう1つは 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
プロバイダー。
Windows認証の使用
データベースサーバーに接続するには、一般に統合セキュリティと呼ばれるWindows認証を使用することをお勧めします。 Windows認証を指定するには、データプロバイダーで次の2つのキーと値のペアのいずれかを使用できます。 NET Framework for SQL Server:
Integrated Security = true;
Integrated Security = SSPI;
ただし、2番目のみがデータプロバイダー .NET Framework OleDb で動作します。 ConnectionStringに Integrated Security = true
を設定すると、例外がスローされます。
データプロバイダーでWindows認証を指定するには。 NET Framework for ODBCでは、次のキーと値のペアを使用する必要があります。
Trusted_Connection = yes;
出典: MSDN:接続文字列の操作
.Net Reflector
を使用して SqlConnection
の実際のコードを確認すると、多くの質問の答えが得られます。
true
と sspi
は同じです:
internal class DbConnectionOptions
...
internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
{
return true;
}
}
...
編集20.02.2018 .Net Coreでは、githubでオープンソースを確認できます! ConvertValueToIntegratedSecurityInternalメソッドを検索します。
Integrated Security = False:接続でユーザーIDとパスワードが指定されています。 統合セキュリティ= true:現在のWindowsアカウントの資格情報が認証に使用されます。
統合セキュリティ= SSPI:これはtrueと同等です。
接続文字列からユーザー名とパスワードの属性を回避し、統合セキュリティを使用できます
統合セキュリティ= false
false
接続文字列でユーザーIDとパスワードが指定されています。
true
Windowsアカウントの資格情報が認証に使用されます。
認識される値は、 true
、 false
、 yes
、 no
、および SSPI
。
User ID
および Password
が指定され、Integrated Securityが true
に設定されている場合、 User ID
およびパスワード
は無視され、統合セキュリティが使用されます
接続文字列は、データに接続している what および方法に固有のものであることに注意してください。これらは同じデータベースに接続していますが、最初はSQL Server用の.NET Framework Data Providerを使用しています。 Integrated Security = TrueはOleDbでは機能しません。
- データソース= .;初期カタログ= aspnetdb;統合セキュリティ= True
- Provider = SQLOLEDB; Data Source = .; Integrated Security = SSPI; Initial Catalog = aspnetdb
疑わしい場合は、Visual Studioサーバーエクスプローラーのデータ接続を使用します。
Trueは、.NET SqlClientライブラリを使用している場合にのみ有効です。 OLEDBを使用する場合は無効です。 .net SqlClientライブラリまたはOLEDBのどちらを使用している場合でも、SSPIが有効です。
私の観点では、
Integrated security = SSPIを使用しない場合は、接続文字列にユーザー名とパスワードをハードコーディングする必要があります。これは、「比較的安全でない」ことを意味します。なぜなら、すべての従業員は元従業員でさえ悪意を持って情報を使用する可能性があるためです。