Tengo dos aplicaciones que usan seguridad integrada. Uno asigna Integrated Security = trueen la cadena de conexión y el otro establece Integrated Security = SSPI.
¿Cuál es la diferencia entre SSPIy trueen el contexto de la seguridad integrada?

Integrated Security = TrueoSSPIno son lo mismo.Integrated Security=true;no funciona en todos los proveedores de SQL, arroja una excepción cuando se usa con elOleDbproveedor. Básicamente,Integrated Security=SSPI;se prefiere ya que funciona con ambosSQLClienty elOleDBproveedor. He agregado una respuesta para una mejor aclaración.Respuestas:
Según Microsoft , son lo mismo.
fuente
Integrated Security=true;no funciona en todos los proveedores de SQL, arroja una excepción cuando se usa con elOleDbproveedor.Básicamente,
Integrated Security=SSPI;se prefiere ya que funciona con ambosSQLClienty elOleDBproveedor.Aquí está el conjunto completo de sintaxis según MSDN - Sintaxis de cadena de conexión (ADO.NET)
fuente
Usando la autenticación de Windows
Para conectarse al servidor de bases de datos se recomienda utilizar la autenticación de Windows, comúnmente conocida como seguridad integrada. Para especificar la autenticación de Windows, puede usar cualquiera de los siguientes dos pares clave-valor con el proveedor de datos. NET Framework para SQL Server:
Sin embargo, solo el segundo funciona con el proveedor de datos .NET Framework OleDb . Si establece
Integrated Security = trueConnectionString, se genera una excepción.Para especificar la autenticación de Windows en el proveedor de datos. NET Framework para ODBC, debe usar el siguiente par clave-valor.
Fuente: MSDN: trabajar con cadenas de conexión
fuente
Muchas preguntas obtienen respuestas si usamos
.Net Reflectorpara ver el código real deSqlConnection:)trueysspison las mismas:EDITAR 20.02.2018 ¡ Ahora en .Net Core podemos ver su código abierto en github! Busque el método ConvertValueToIntegratedSecurityInternal:
https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs
fuente
ConvertValueToIntegratedSecurityInternal. Esa propiedad se usa solo cuando el proveedor estáSqlClientasíSqlClient,SSPIytrueson iguales, pero no cuando el cliente esOleDboOracleClient. He aclarado que en stackoverflow.com/a/23637478/704008 con referencia msdnSeguridad integrada = Falso: la identificación de usuario y la contraseña se especifican en la conexión. Seguridad integrada = verdadero: las credenciales actuales de la cuenta de Windows se utilizan para la autenticación.
Seguridad integrada = SSPI: esto es equivalente a verdadero.
Podemos evitar los atributos de nombre de usuario y contraseña de la cadena de conexión y usar la seguridad integrada
fuente
Déjame comenzar con
Integrated Security = falsefalseLa identificación de usuario y la contraseña se especifican en la cadena de conexión.trueLas credenciales de la cuenta de Windows se usan para la autenticación.Los valores reconocidos son
true,false,yes,no, ySSPI.Si
User IDyPasswordse especifican y seguridad integrada se establece entrue, a continuación,User IDyPasswordserá ignorado y seguridad integrada se utilizaráfuente
Tenga en cuenta que las cadenas de conexión son específicas de qué y cómo se conecta a los datos. Estos se conectan a la misma base de datos, pero el primero es usar .NET Framework Data Provider para SQL Server. Integrated Security = True no funcionará para OleDb.
En caso de duda, use las conexiones de datos de Visual Studio Server Explorer.
fuente
True solo es válido si está utilizando la biblioteca .NET SqlClient. No es válido cuando se utiliza OLEDB. Donde SSPI es bvaid en ambos, está utilizando la biblioteca .net SqlClient o OLEDB.
fuente
Desde mi punto de vista,
Si no usa Seguridad integrada = SSPI, entonces necesita codificar el nombre de usuario y la contraseña en la cadena de conexión, lo que significa "relativamente inseguro", porque todos los empleados tienen acceso, incluso un ex empleado podría usar la información maliciosamente.
fuente