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?

¿Fue útil?

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 son true , false , yes , no y sspi (fuertemente recomendado), que es equivalente a true .

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)

! [Sintaxis de autenticación de Windows

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;

Fuente: MSDN: Trabajar con cadenas de conexión

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

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top