web-dev-qa-db-fra.com

Quelle est la différence entre Integrated Security = True et Integrated Security = SSPI?

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?

479
JD.

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 sont true, false, yes, no et sspi (fortement recommandé), ce qui équivaut à true.

400
cptScarlet

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)

![Windows Auth Syntax

137
Pranav Singh

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;

Source: MSDN: Travailler avec des chaînes de connexion

64
Asereware

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:

https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionO Options.

31
Pavel Biryukov

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

21
NITIN KAUSHIK

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

13
kudlatiger

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.

  • Source de données = .; Catalogue initial = aspnetdb; Sécurité intégrée = True
  • Fournisseur = SQLOLEDB; Source de données = .; Sécurité intégrée = SSPI; Catalogue initial = aspnetdb

En cas de doute, utilisez les connexions de données Visual Studio Server Explorer.

7
user1874524

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.

5
Amit Shishodia

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.

2
Sathishkumar