¿Cuál es la diferencia entre Integrated Security = True y Integrated Security = SSPI?
-
22-07-2019 - |
Pregunta
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 Integrated Security?
Solución
Según Microsoft ellos son lo mismo.
Cuando
false
, la identificación de usuario y la contraseña se especifican en la conexión. Cuando es verdadero, las credenciales actuales de la cuenta de Windows se usan para la autenticación.
Los valores reconocidos sontrue
,false
,yes
,no
ysspi
(fuertemente recomendado), que es equivalente atrue
.
Otros consejos
Integrated Security = true;
no funciona en todos los proveedores SQL, arroja una excepción cuando se usa con el proveedor OleDb
.
Entonces, básicamente, se prefiere Integrated Security = SSPI;
ya que funciona con SQLClient
& amp; Proveedor OleDB
.
Aquí está el conjunto completo de sintaxis según MSDN - Sintaxis de cadena de conexión (ADO.NET)
Uso de 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:
Integrated Security = true;
Integrated Security = SSPI;
Sin embargo, solo el segundo funciona con el proveedor de datos .NET Framework OleDb . Si configura Integrated Security = true
para 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.
Trusted_Connection = yes;
Muchas preguntas obtienen respuestas si usamos .Net Reflector
para ver el código real de SqlConnection
:)
true
y sspi
son lo mismo:
internal class DbConnectionOptions
...
internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
{
return true;
}
}
...
EDITAR 20.02.2018 ¡Ahora en .Net Core podemos ver su código abierto en github! Busque el método ConvertValueToIntegratedSecurityInternal:
Seguridad 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
Permítanme comenzar con Integrated Security = false
false
la identificación de usuario y la contraseña se especifican en la cadena de conexión.
Las true
credenciales de cuenta de Windows se utilizan para la autenticación.
Los valores reconocidos son true
, false
, yes
, no
y SSPI
.
Si se especifican ID de usuario
y Password
y Integrated Security se establece en true
, entonces ID de usuario
y Password
se ignorará y se utilizará la seguridad integrada
Tenga en cuenta que las cadenas de conexión son específicas de qué y cómo se está conectando 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.
- Fuente de datos = .; Catálogo inicial = aspnetdb; Seguridad integrada = Verdadero
- Proveedor = SQLOLEDB; Fuente de datos = .; Seguridad integrada = SSPI; Catálogo inicial = aspnetdb
En caso de duda, utilice las conexiones de datos de Visual Studio Server Explorer.
- ¿Qué es sspi ?
- Sintaxis de cadenas de conexión
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.
En mi punto de vista,
Si no utiliza Integrated security = SSPI, debe codificar el nombre de usuario y la contraseña en la cadena de conexión, lo que significa "relativamente inseguro". porque porque todos los empleados tienen acceso, incluso un ex empleado podría usar la información de manera maliciosa.