J'ai deux applications qui utilisent la sécurité intégrée. L'un affecte Integrated Security = true
dans la chaîne de connexion et l'autre définit Integrated Security = SSPI
.
Quelle est la différence entre SSPI
et true
dans le contexte de la sécurité intégrée?
Selon Microsoft ils sont la même chose.
Lorsque
false
, l'ID utilisateur et le mot de passe sont spécifiés dans la connexion. Lorsque la valeur est true, les informations d'identification du compte Windows actuel sont utilisées pour l'authentification.
Les valeurs reconnues sonttrue
,false
,yes
,no
etsspi
(fortement recommandé), ce qui équivaut àtrue
.
Integrated Security=true;
ne fonctionne pas avec tous les fournisseurs SQL, il lève une exception lorsqu'il est utilisé avec le fournisseur OleDb
.
Donc, fondamentalement, Integrated Security=SSPI;
est préférable car fonctionne avec le fournisseur SQLClient
& OleDB
.
Voici le jeu complet de syntaxes selon MSDN - Syntaxe de chaîne de connexion (ADO.NET)
Utilisation de l'authentification Windows
Pour vous connecter au serveur de base de données, il est recommandé d'utiliser l'authentification Windows, communément appelée sécurité intégrée. Pour spécifier l'authentification Windows, vous pouvez utiliser l'une des deux paires clé-valeur suivantes avec le fournisseur de données. NET Framework pour SQL Server:
Integrated Security = true;
Integrated Security = SSPI;
Cependant, seul le second fonctionne avec le fournisseur de données . NET Framework OleDb . Si vous définissez Integrated Security = true
pour ConnectionString, une exception est levée.
Pour spécifier l'authentification Windows dans le fournisseur de données. NET Framework pour ODBC, vous devez utiliser la paire clé-valeur suivante.
Trusted_Connection = yes;
Beaucoup de questions obtiennent des réponses si nous utilisons .Net Reflector
pour voir le code actuel de SqlConnection
:) true
et sspi
sont les mêmes:
internal class DbConnectionOptions
...
internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
{
return true;
}
}
...
EDIT 20.02.2018 Maintenant, dans .Net Core, nous pouvons voir son code source ouvert sur github! Recherchez la méthode ConvertValueToIntegratedSecurityInternal:
Sécurité intégrée = False: l'ID utilisateur et le mot de passe sont spécifiés dans la connexion. Sécurité intégrée = true: les informations d'identification du compte Windows actuel sont utilisées pour l'authentification.
Sécurité intégrée = SSPI: équivalent à true.
Nous pouvons éviter les attributs de nom d'utilisateur et de mot de passe de la chaîne de connexion et utiliser l'Integrated Security
Permettez-moi de commencer par Integrated Security = false
false
L'ID utilisateur et le mot de passe sont spécifiés dans la chaîne de connexion.true
Les informations d'identification du compte Windows sont utilisées pour l'authentification.
Les valeurs reconnues sont true
, false
, yes
, no
et SSPI
.
Si User ID
et Password
sont spécifiés et si la sécurité intégrée est définie sur true
, alors User ID
et Password
seront ignorés et la sécurité intégrée sera utilisée
Notez que les chaînes de connexion sont spécifiques à à quoi et comment vous vous connectez à Les données. Ceux-ci se connectent à la même base de données, mais la première utilise le fournisseur de données .NET Framework pour SQL Server. Sécurité intégrée = True ne fonctionnera pas pour OleDb.
En cas de doute, utilisez les connexions de données Visual Studio Server Explorer.
True n'est valide que si vous utilisez la bibliothèque .NET SqlClient. Ce n'est pas valable lorsque vous utilisez OLEDB. Où SSPI est bvaid dans les deux cas, vous utilisez la bibliothèque .net SqlClient ou OLEDB.
De mon point de vue,
Si vous n'utilisez pas Sécurité intégrée = SSPI, vous devez coder en dur le nom d'utilisateur et le mot de passe dans la chaîne de connexion, ce qui signifie "relativement peu sûr", car tous les employés ont accès, même les anciens employés peuvent utiliser ces informations à des fins malveillantes.