Ciąg połączenia przy użyciu uwierzytelniania systemu Windows

140

Tworzę serwis WWW, ale w bazie używam uwierzytelniania Windows.

Wiem, że używasz tego do uwierzytelniania SQL

<connectionStrings> 
    <add name="NorthwindContex" 
       connectionString="data source=localhost;
       initial catalog=northwind;persist security info=True; 
       user id=sa;password=P@ssw0rd" 
       providerName="System.Data.SqlClient" /> 
</connectionStrings>

Jak zmodyfikować to, aby działało z uwierzytelnianiem systemu Windows?

MDC
źródło
Nie jestem pewien, czy masz na myśli ogólne konto systemu Windows, które ma być używane przez różne ludy
rchacko

Odpowiedzi:

201

Zastąp nazwę użytkownika i hasło na Integrated Security=SSPI;

Więc parametry połączenia powinny być

<connectionStrings> 
<add name="NorthwindContex" 
   connectionString="data source=localhost;
   initial catalog=northwind;persist security info=True; 
   Integrated Security=SSPI;" 
   providerName="System.Data.SqlClient" /> 
</connectionStrings> 
głowice5150
źródło
1
Wiem, że możesz ustawić określonego użytkownika AD do puli aplikacji (aplikacja internetowa). czy możesz zrobić to samo dla aplikacji dla systemu Windows?
user384080
6
Persist Security Infoprawdopodobnie nie jest potrzebne: stackoverflow.com/a/2010059/1869660
Sphinxxx
@ heads5150: Czy to możliwe, że w moim projekcie nie ma żadnych parametrów połączenia? brakuje mi czegoś. Przeszukałem całe moje rozwiązanie, aby znaleźć parametry połączenia, jak powyżej. nie mogłem znaleźć żadnego. Ten, który założyłem, został skomentowany w wersji internetowej i konfiguracji sieciowej. Używam vs Express 2013 z lokalną bazą danych.
Vini
21

Aby uzyskać prawidłowe rozwiązanie po wielu godzinach:

  1. Otwórz plik konfiguracyjny
  2. Zmień parametry połączenia, wykonując następujące czynności

<add name="umbracoDbDSN" connectionString="data source=YOUR_SERVER_NAME;database=nrc;Integrated Security=SSPI;persist security info=True;" providerName="System.Data.SqlClient" />

  1. Zmień YOUR_SERVER_NAME z obecną nazwą serwera i zapisz
  2. Otwórz Menedżera usług IIS
  3. Znajdź nazwę puli aplikacji, z której korzysta witryna lub aplikacja internetowa
  4. Kliknij prawym przyciskiem myszy i wybierz Ustawienia zaawansowane
  5. W ustawieniach zaawansowanych w obszarze Model procesu zmień tożsamość na konto niestandardowe i dodaj dane administratora serwera, zobacz załączone obrazy:

wprowadź opis obrazu tutaj

Mam nadzieję, że to pomoże.

Ahmed Na.
źródło
2
To rozwiązanie zadziałało u mnie, ale zastanawiałem się, jak ta zmiana tożsamości wpływa na zachowanie aplikacji pod względem bezpieczeństwa?
CesarB
Wszystkie czynności wykonywane przez proces będą wykonywane z uprawnieniami / przywilejami tego konta. Nie udzielaj więcej uprawnień niż to konieczne. Wskazane byłoby dedykowane konto usługi. Poleciłbym
channel_tape_coder
14

Aby połączyć się z bazą danych serwera sql za pośrednictwem uwierzytelniania systemu Windows, w zasadzie potrzebny jest serwer, z którym chcesz się połączyć, jaka jest nazwa bazy danych, informacje o zintegrowanych zabezpieczeniach i nazwa dostawcy.

Zasadniczo to działa:

<connectionStrings>      
<add name="MyConnectionString"
         connectionString="data source=ServerName;
   Initial Catalog=DatabaseName;Integrated Security=True;"
         providerName="System.Data.SqlClient" />
</connectionStrings> 

Ustawienie pola Integrated Security na wartość true oznacza, że ​​zasadniczo chcesz uzyskać dostęp do bazy danych za pośrednictwem uwierzytelniania systemu Windows, jeśli ustawisz to pole na wartość false uwierzytelnianie systemu Windows nie będzie działać.

Działa również inaczej w zależności od używanego dostawcy.

  • SqlClient both Integrated Security = true; lub IntegratedSecurity = SSPI; działa.

  • OleDb to Integrated Security = SSPI;

  • Odbc to Trusted_Connection = yes;
  • OracleClient to Integrated Security = tak;

Integrated Security = true zgłasza wyjątek, gdy jest używany z dostawcą OleDb.

nzrytmn
źródło
7

To jest krótsze i działa

<connectionStrings>      
<add name="DBConnection"
             connectionString="data source=SERVER\INSTANCE;
       Initial Catalog=MyDB;Integrated Security=SSPI;"
             providerName="System.Data.SqlClient" />
</connectionStrings> 

Utrwalanie informacji o zabezpieczeniach nie jest potrzebne

Carlos E.
źródło