Eu tenho dois aplicativos que usam a Segurança Integrada. Um atribui Integrated Security = truena cadeia de conexão e o outro define Integrated Security = SSPI.
Qual é a diferença entre SSPIe trueno contexto da Segurança Integrada?
Eu tenho dois aplicativos que usam a Segurança Integrada. Um atribui Integrated Security = truena cadeia de conexão e o outro define Integrated Security = SSPI.
Qual é a diferença entre SSPIe trueno contexto da Segurança Integrada?
Respostas:
Segundo a Microsoft, eles são a mesma coisa.
Quando
false, a ID do usuário e a senha são especificadas na conexão. Quando verdadeiro, as credenciais atuais da conta do Windows são usadas para autenticação.
Os valores são reconhecidostrue,false,yes,no, esspi(fortemente recomendado), que é equivalente atrue.
Integrated Security=true;não funciona em todos os provedores SQL, lança uma exceção quando usado com o OleDbprovedor.
Então, basicamente Integrated Security=SSPI;é o preferido, pois trabalha com o SQLClient& OleDBprovider.
Aqui está o conjunto completo de sintaxes de acordo com o MSDN - Sintaxe de seqüência de conexão (ADO.NET)
Usando autenticação do Windows
Para conectar-se ao servidor de banco de dados, é recomendável usar a Autenticação do Windows, comumente conhecida como segurança integrada. Para especificar a autenticação do Windows, você pode usar qualquer um dos dois pares de valores-chave a seguir com o provedor de dados. NET Framework para SQL Server:
Integrated Security = true;
Integrated Security = SSPI;
No entanto, apenas o segundo funciona com o provedor de dados .NET Framework OleDb . Se você definir Integrated Security = truepara ConnectionString, uma exceção será lançada.
Para especificar a autenticação do Windows no provedor de dados. NET Framework para ODBC, você deve usar o seguinte par de valores-chave.
Trusted_Connection = yes;
Muitas perguntas obtêm respostas se usarmos .Net Reflectorpara ver o código real de SqlConnection:)
truee sspisão as mesmas:
internal class DbConnectionOptions
...
internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
{
return true;
}
}
...
EDIT 20.02.2018 Agora, no .Net Core, podemos ver seu código aberto no github! Procure pelo método ConvertValueToIntegratedSecurityInternal:
ConvertValueToIntegratedSecurityInternal. Essa propriedade é usada somente quando provedor está no SqlClientmodo em SqlClient, SSPIe truesão os mesmos, mas não quando o cliente é OleDbou OracleClient. Eu esclarei que no stackoverflow.com/a/23637478/704008 com referência de msdn
Segurança Integrada = Falso: ID do Usuário e Senha são especificados na conexão. Segurança Integrada = true: as credenciais atuais da conta do Windows são usadas para autenticação.
Segurança Integrada = SSPI: isso é equivalente a verdadeiro.
Podemos evitar os atributos de nome de usuário e senha da cadeia de conexão e usar o Integrated Security
Deixe-me começar com Integrated Security = false
false O ID do usuário e a senha são especificados na cadeia de conexão.
true As credenciais da conta do Windows são usadas para autenticação.
Os valores reconhecidos são true, false, yes, no, eSSPI .
Se User IDe Passwordsão especificados e segurança integrada está definida para true, em seguida, User IDe Passwordserá ignorado e Segurança Integrada será usado
Observe que as cadeias de conexão são específicas para o que e como você está se conectando aos dados. Eles estão se conectando ao mesmo banco de dados, mas o primeiro está usando o .NET Framework Data Provider para SQL Server. Segurança Integrada = True não funcionará para o OleDb.
Em caso de dúvida, use as conexões de dados do Visual Studio Server Explorer.
True é válido apenas se você estiver usando a biblioteca .NET SqlClient. Não é válido ao usar OLEDB. Onde SSPI é bvaid, você está usando a biblioteca .net SqlClient ou OLEDB.
No meu ponto de vista,
Se você não usar o Integrated security = SSPI, precisará codificar o nome de usuário e a senha na cadeia de conexão, o que significa "relativamente inseguro" porque, porque todos os funcionários têm acesso, mesmo que ex-funcionários possam usar as informações de maneira maliciosa.
Integrated Security = TrueouSSPInão são iguais.Integrated Security=true;não funciona em todos os provedores SQL, lança uma exceção quando usado com oOleDbprovedor. Então, basicamenteIntegrated Security=SSPI;é o preferido, pois trabalha com oSQLClient&OleDBprovider. Eu adicionei uma resposta para melhor esclarecimento.