Eu tenho dois aplicativos que usam a Segurança Integrada. Um atribui Integrated Security = true
na cadeia de conexão e o outro define Integrated Security = SSPI
.
Qual é a diferença entre SSPI
e true
no contexto da Segurança Integrada?
Eu tenho dois aplicativos que usam a Segurança Integrada. Um atribui Integrated Security = true
na cadeia de conexão e o outro define Integrated Security = SSPI
.
Qual é a diferença entre SSPI
e true
no 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 OleDb
provedor.
Então, basicamente Integrated Security=SSPI;
é o preferido, pois trabalha com o SQLClient
& OleDB
provider.
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 = true
para 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 Reflector
para ver o código real de SqlConnection
:)
true
e sspi
sã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 SqlClient
modo em SqlClient
, SSPI
e true
são os mesmos, mas não quando o cliente é OleDb
ou 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 ID
e Password
são especificados e segurança integrada está definida para true
, em seguida, User ID
e Password
será 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 = True
ouSSPI
não são iguais.Integrated Security=true;
não funciona em todos os provedores SQL, lança uma exceção quando usado com oOleDb
provedor. Então, basicamenteIntegrated Security=SSPI;
é o preferido, pois trabalha com oSQLClient
&OleDB
provider. Eu adicionei uma resposta para melhor esclarecimento.