Tümleşik Güvenlik = Doğru ve Tümleşik Güvenlik = SSPI arasındaki fark nedir?


531

Entegre Güvenlik kullanan iki uygulamam var. Biri Integrated Security = truebağlantı dizesine, diğeri ise atar Integrated Security = SSPI.

Entegre Güvenlik arasındaki SSPIve truebağlamındaki fark nedir ?


70
Kabul edilen cevap en iyisi değil, tam olarak doğru değil. Integrated Security = Trueveya SSPIaynı değil. Integrated Security=true;tüm SQL sağlayıcılarında çalışmaz, sağlayıcıyla birlikte kullanıldığında bir istisna atar OleDb. Yani Integrated Security=SSPI;hem SQLClient& OleDBsağlayıcı ile çalıştığı için temelde tercih edilir . Daha iyi açıklama için bir cevap ekledim.
Pranav Singh

3
@PranavSingh doğru fikre sahiptir, hangi sağlayıcıyı kullandığınızı belirtmedikçe bu soru eksiktir . Farklı sağlayıcılar çeşitli dizeleri kabul eder ve / veya dahili durumlara çevirir.
Mark

Her ne kadar aynı olsalar da, web sitelerinden birinde çok eski bir belgenin olduğuna inanıyorum, seninle aynı şekilde merak ediyordum, Windows Mobile için geliştiriyorsanız (bugün gördüğünüz gibi değil, eski cihazlar daha önce hiç sahip olmadığımdan beri OS son ekini hatırlamıyorum), birlikte SSPI ve Kullanıcı Parolasını kullanmalısınız. ama hiç yazmadım ve bu belgenin kaynağını hatırlamıyorum, bunu garanti edemem.
deadManN

Yanıtlar:


436

Microsoft'a göre bunlar aynı şey.

Ne zaman false, bağlantıda Kullanıcı Kimliği ve Parola belirtilir. Değer doğruysa, geçerli Windows hesabı kimlik bilgileri kimlik doğrulaması için kullanılır.
Tanınan değerler vardır true, false, yes, no, ve sspieşdeğer olan (şiddetle tavsiye edilir) true.


28
Başlangıçta, "Gerçek" kullanılan NTLM ve "SSPI" Kerberos kullanılan bir fark olduğunu düşünüyorum, ama şimdi değiştirilebilir.
SqlRyan

5
Son yorumu kontrol etmedim, ancak doğruysa, cevap olarak olmalı, ancak yorum olmamalı
Johnny_D

20
@RodneyFoley üzgünüm, testlerim bu cevabın doğru olduğunu ve yorumunuzun doğru olmadığını onaylıyor. Belki bir kez bu şekilde çalıştı, ama şimdi çalışmıyor ve görüşünüzü destekleyen bir Microsoft dokümanı için herhangi bir referans veremezsiniz.
Kirk Broadhurst

3
Kirk ile aynı fikirde. SSPI belirtildiğinde kullanıcı / şifre yok sayılır - .net 4.0, SQL server 2012.
Alex des Pelagos

3
Bu yüzden daha ziyade " "true" veya "daha şiddetle tavsiye" neden SSPı olan "aynı şey" eğer evet Ben bu soruya geldi nedeni bu ...?
Zé Carlos

171

Integrated Security=true;tüm SQL sağlayıcılarında çalışmaz, sağlayıcıyla birlikte kullanıldığında bir istisna atar OleDb.

Yani Integrated Security=SSPI;hem SQLClient& OleDBsağlayıcı ile çalıştığı için temelde tercih edilir .

İşte MSDN - Connection String Syntax (ADO.NET) 'e göre tam sözdizimi kümesi

! [Windows Yetkilendirme Sözdizimi


73

Windows Kimlik Doğrulamasını Kullanma

Veritabanı sunucusuna bağlanmak için, genellikle tümleşik güvenlik olarak bilinen Windows Kimlik Doğrulaması'nın kullanılması önerilir. Windows kimlik doğrulamasını belirtmek için veri sağlayıcısıyla aşağıdaki iki anahtar / değer çiftinden herhangi birini kullanabilirsiniz. SQL Server için NET Framework:

 Integrated Security = true;
 Integrated Security = SSPI;

Ancak, yalnızca ikincisi veri sağlayıcı .NET Framework OleDb ile çalışır . Integrated Security = trueConnectionString için ayarlarsanız bir istisna atılır.

Veri sağlayıcıda Windows kimlik doğrulamasını belirtmek için. ODBC için NET Framework, aşağıdaki anahtar / değer çiftini kullanmalısınız.

Trusted_Connection = yes;

Kaynak: MSDN: Bağlantı Dizeleriyle Çalışma


33

Kullandığımız takdirde birçok soru cevap almak .Net Reflectorfiili kodunu görmek için SqlConnection:) trueve sspiaynıdır:

internal class DbConnectionOptions

...

internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
    if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
    {
        return true;
    }
}

...

EDIT 20.02.2018 Şimdi .Net Core'da açık kaynağını github'da görebiliyoruz! ConvertValueToIntegratedSecurityInternal yöntemini arayın:

https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs


2
Kodun bu kısmı, yalnızca adıyla açıklanabilen bir durum için özelliktir ConvertValueToIntegratedSecurityInternal. Yani mülkiyet sağlayıcısıdır yalnızca kullanılır SqlClientböylece de SqlClient, SSPI& trueaynıdır ancak istemci olduğunda değil OleDbya OracleClient. Ben o açıklık var stackoverflow.com/a/23637478/704008 msdn atfen
Pranav Singh

Pranav'ın sebebi için aşağı oy.
Scott

21

Integrated Security = False: Bağlantıda Kullanıcı Kimliği ve Parola belirtilir. Tümleşik Güvenlik = true: kimlik doğrulaması için geçerli Windows hesabı kimlik bilgileri kullanılır.

Entegre Güvenlik = SSPI: Bu, doğruya eşdeğerdir.

Bağlantı dizesinden kullanıcı adı ve parola özelliklerinden kaçınabilir ve Entegre Güvenliği kullanabiliriz


13

İle başlayayım Integrated Security = false

false Kullanıcı adı ve Parola bağlantı dizesinde belirtilir.
true Kimlik doğrulaması için Windows hesabı kimlik bilgileri kullanılır.

Tanınan değerler true, false, yes, no, ve SSPI.

Eğer User IDve Passwordbelirtilen ve Entegre Güvenlik ayarlandığında true, daha sonra User IDve Passwordyok sayılacak ve Entegre Güvenlik kullanılacaktır


7

Bağlantı dizelerinin verilere ne ve nasıl bağlandığınıza özel olduğunu unutmayın . Bunlar aynı veritabanına bağlanıyor ancak ilki SQL Server için .NET Framework Veri Sağlayıcısı kullanıyor. Integrated Security = True, OleDb için çalışmaz.

  • Veri Kaynağı = .; İlk Katalog = aspnetdb; Entegre Güvenlik = Doğru
  • Sağlayıcı = SQLOLEDB; Veri Kaynağı = .; Tümleşik Güvenlik = SSPI; İlk Katalog = aspnetdb

Şüphe duyduğunuzda Visual Studio Server Explorer Veri Bağlantıları'nı kullanın.



2

Benim bakış açıma göre,

Tümleşik güvenlik = SSPI kullanmıyorsanız, bağlantı dizesindeki kullanıcı adını ve parolayı sabit olarak kodlamanız gerekir, bu da "nispeten güvensiz" anlamına gelir;


1
Bağlantı dizesi herhangi bir çalışan tarafından görülemez.
underscore_d
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.