Mam dwie aplikacje korzystające ze zintegrowanych zabezpieczeń. Jeden przypisuje Integrated Security = true
ciąg połączenia, a drugi zestaw Integrated Security = SSPI
.
Jaka jest różnica między zintegrowanym bezpieczeństwem SSPI
i true
w jego kontekście?
Integrated Security = True
lubSSPI
nie są takie same.Integrated Security=true;
nie działa u wszystkich dostawców SQL, zgłasza wyjątek, gdy jest używany zOleDb
dostawcą. ZasadniczoIntegrated Security=SSPI;
jest to preferowane, ponieważ działa zarówno z usługodawcą, jakSQLClient
iOleDB
dostawcą. Dodałem odpowiedź dla lepszego wyjaśnienia.Odpowiedzi:
Według Microsoft są one tym samym.
źródło
Integrated Security=true;
nie działa u wszystkich dostawców SQL, zgłasza wyjątek, gdy jest używany zOleDb
dostawcą.Zasadniczo
Integrated Security=SSPI;
jest to preferowane, ponieważ działa zarówno z dostawcą, jakSQLClient
iOleDB
dostawcą.Oto pełny zestaw składni zgodnie z MSDN - Składnia ciągu połączenia (ADO.NET)
źródło
Korzystanie z uwierzytelniania systemu Windows
Aby połączyć się z serwerem bazy danych, zaleca się korzystanie z uwierzytelniania systemu Windows, zwanego potocznie zintegrowanym zabezpieczeniem. Aby określić uwierzytelnianie systemu Windows, możesz użyć dowolnej z dwóch poniższych par klucz-wartość z dostawcą danych. NET Framework dla SQL Server:
Jednak tylko drugi działa z dostawcą danych .NET Framework OleDb . Jeśli ustawisz
Integrated Security = true
ConnectionString, zgłaszany jest wyjątek.Aby określić uwierzytelnianie systemu Windows w dostawcy danych. NET Framework dla ODBC, należy użyć następującej pary klucz-wartość.
Źródło: MSDN: Praca z ciągami połączeń
źródło
Wiele pytań otrzymuje odpowiedzi, jeśli używamy
.Net Reflector
do wyświetlenia rzeczywistego koduSqlConnection
:)true
isspi
są takie same:EDYCJA 20.02.2018 Teraz w .Net Core możemy zobaczyć jego open source na github! Wyszukaj metodę ConvertValueToIntegratedSecurityInternal:
https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs
źródło
ConvertValueToIntegratedSecurityInternal
. Ta właściwość jest używana tylko wtedy, gdy dostawcaSqlClient
tak jestSqlClient
,SSPI
itrue
są takie same, ale nie, gdy klient jestOleDb
lubOracleClient
. Wyjaśniłem, że w stackoverflow.com/a/23637478/704008 z referencją msdnZintegrowane zabezpieczenia = Fałsz: identyfikator użytkownika i hasło są określone w połączeniu. Zintegrowane zabezpieczenia = prawda: bieżące poświadczenia konta Windows są używane do uwierzytelniania.
Zintegrowane zabezpieczenia = SSPI: jest to równoważne z wartością true.
Możemy uniknąć atrybutów nazwy użytkownika i hasła z ciągu połączenia i użyć zintegrowanych zabezpieczeń
źródło
Zacznę od
Integrated Security = false
false
Identyfikator użytkownika i hasło są określone w ciągu połączenia.true
Poświadczenia konta Windows są używane do uwierzytelniania.Uznane wartości
true
,false
,yes
,no
, iSSPI
.Jeśli
User ID
iPassword
są określone, a Zintegrowane zabezpieczenia są ustawione natrue
, wówczasUser ID
iPassword
zostaną zignorowane, a Zintegrowane zabezpieczenia zostaną użyteźródło
Pamiętaj, że parametry połączenia są specyficzne dla tego, co i jak łączysz się z danymi. Łączą się one z tą samą bazą danych, ale pierwsza korzysta z .NET Framework Data Provider dla SQL Server. Zintegrowane zabezpieczenia = True nie będzie działać dla OleDb.
W razie wątpliwości użyj połączeń danych programu Visual Studio Server Explorer.
źródło
Prawda jest poprawna tylko w przypadku korzystania z biblioteki .NET SqlClient. Nie działa przy korzystaniu z OLEDB. Gdzie SSPI jest bvaid w obu, albo używasz biblioteki .net SqlClient lub OLEDB.
źródło
Z mojego punktu widzenia,
Jeśli nie używasz zintegrowanego zabezpieczenia = SSPI, musisz zakodować nazwę użytkownika i hasło w ciągu połączenia, co oznacza „względnie niepewne” dlaczego, ponieważ wszyscy pracownicy mają dostęp, nawet były pracownik może złośliwie wykorzystać informacje.
źródło