Tengo dos aplicaciones que usan seguridad integrada. Uno asigna Integrated Security = true
en la cadena de conexión y el otro establece Integrated Security = SSPI
.
¿Cuál es la diferencia entre SSPI
y true
en el contexto de la seguridad integrada?
Integrated Security = True
oSSPI
no son lo mismo.Integrated Security=true;
no funciona en todos los proveedores de SQL, arroja una excepción cuando se usa con elOleDb
proveedor. Básicamente,Integrated Security=SSPI;
se prefiere ya que funciona con ambosSQLClient
y elOleDB
proveedor. 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 elOleDb
proveedor.Básicamente,
Integrated Security=SSPI;
se prefiere ya que funciona con ambosSQLClient
y elOleDB
proveedor.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 = true
ConnectionString, 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 Reflector
para ver el código real deSqlConnection
:)true
ysspi
son 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áSqlClient
asíSqlClient
,SSPI
ytrue
son iguales, pero no cuando el cliente esOleDb
oOracleClient
. 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 = false
false
La identificación de usuario y la contraseña se especifican en la cadena de conexión.true
Las credenciales de la cuenta de Windows se usan para la autenticación.Los valores reconocidos son
true
,false
,yes
,no
, ySSPI
.Si
User ID
yPassword
se especifican y seguridad integrada se establece entrue
, a continuación,User ID
yPassword
será 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