Różnica między użytkownikiem a loginem w programie SQL Server

178

Ostatnio natknąłem się na wiele różnych obszarów SQL Server, z którymi normalnie się nie bawię. Jednym z nich, który mnie zdezorientował, jest obszar logowania i użytkowników. Wygląda na to, że powinien to być dość prosty temat ...

Wygląda na to, że każdy login może mieć tylko 1 użytkownika, a każdy użytkownik może mieć tylko 1 login.

Nazwa logowania może być powiązana z wieloma tabelami, w ten sposób przypisując tego użytkownika do wielu tabel.

Więc moje pytanie brzmi: dlaczego w ogóle mam login i użytkownika? wydają się być jednym w tym samym. Jakie są różnice lub czego mi brakuje?

corymathews
źródło

Odpowiedzi:

202

„Login” zapewnia główny wpis na SERWER.

„Użytkownik” przyznaje wpis logowania do pojedynczej BAZY DANYCH.

Jeden „login” może być powiązany z wieloma użytkownikami (jeden na bazę danych).

Każdy z powyższych obiektów może mieć nadane mu uprawnienia na własnym poziomie. Zobacz poniższe artykuły, aby zapoznać się z objaśnieniem każdego z nich

Scott Ivey
źródło
7
Ach, nic dziwnego, że nie mogłem znaleźć różnicy. Po prostu pracowałem z 1 bazą danych. dzięki.
corymathews
3
Ta odpowiedź jest zasadniczo poprawna, ale jak rozumiem, konkretnemu użytkownikowi można w rzeczywistości przyznać dostęp do więcej niż jednej bazy danych dostępnej na tym konkretnym serwerze. Zatem logowanie do użytkownika to mapowanie 1-do-1, ale mapowanie użytkownik-baza danych to mapowanie 1-do-wielu.
pasztet
1
@coreymathews: Mniej czasu w „Boy Meets World”, a więcej w książkach! ;).
MSIS
Ale teraz MSDN zaleca typ użytkownika „Użytkownicy, którzy uwierzytelniają się w bazie danych” (zalecane, aby uczynić bazę danych bardziej przenośną). Link: docs.microsoft.com/en-us/sql/t-sql/statements/… Czy to lepsze niż tradycyjny typ użytkownika?
Sheen
32

Jednym z powodów, dla których warto mieć oba, jest to, że uwierzytelnianie może być wykonywane przez serwer bazy danych, ale autoryzacja może być ograniczona do bazy danych. W ten sposób, jeśli przeniesiesz bazę danych na inny serwer, zawsze możesz zmienić odwzorowanie relacji użytkownik-login na serwerze bazy danych, ale Twoja baza danych nie musi się zmieniać.

Tom Resing
źródło
Czy możesz to rozwinąć? Jaka jest zaleta zmiany wprowadzanej na serwerze bazy danych, a nie w bazie danych?
HeyJude
Załóżmy, że chcesz wykonać kopię zapasową i przywrócić bazę danych. Przywracanie jest często wykonywane na nowym serwerze. Możesz nie chcieć wprowadzać zmian w bazie danych podczas przywracania.
Tom Resing
Dlaczego nie wprowadzić zmiany po przywróceniu bazy danych?
HeyJude,
1
W SQLAuthority jest dobre 60-sekundowe wideo na ten temat, aby uzyskać więcej informacji blog.sqlauthority.com/2014/07/16/…
Tom Resing
1
@HeyJude Oznacza to, że serwer zajmuje się uwierzytelnianiem, co baza danych musiałaby zrobić, gdyby nie logowanie i separacja użytkowników.
Zaid Khan
25

Myślę, że jest naprawdę dobry wpis na blogu MSDN na ten temat autorstwa Laurentiu Cristofor:

Pierwszą ważną rzeczą, którą należy zrozumieć, jeśli chodzi o bezpieczeństwo programu SQL Server, jest to, że w grę wchodzą dwa obszary zabezpieczeń - serwer i baza danych. Dziedzina serwera obejmuje wiele dziedzin baz danych. Całość prac wykonywana jest w kontekście jakiejś bazy danych, ale aby móc przystąpić do pracy, trzeba najpierw mieć dostęp do serwera, a dopiero potem mieć dostęp do bazy danych.

Dostęp do serwera odbywa się poprzez loginy. Istnieją dwie główne kategorie loginów: uwierzytelnione logowania SQL Server i uwierzytelnione logowania Windows. Zwykle będę się do nich odwoływał używając krótszych nazw loginów SQL i loginów Windows. Uwierzytelnione dane logowania systemu Windows mogą być danymi logowania zamapowanymi na użytkowników systemu Windows lub nazwami logowania zmapowanymi na grupy systemu Windows. Aby więc móc połączyć się z serwerem, trzeba mieć dostęp za pośrednictwem jednego z tych typów lub loginów - loginy zapewniają dostęp do domeny serwera.

Ale loginy nie wystarczą, ponieważ praca jest zwykle wykonywana w bazie danych, a bazy danych są oddzielnymi dziedzinami. Dostęp do baz danych jest przyznawany za pośrednictwem użytkowników.

Użytkownicy są mapowani na loginy, a mapowanie jest wyrażane przez właściwość SID nazw logowania i użytkowników. Dane logowania są mapowane na użytkownika w bazie danych, jeśli ich wartości SID są identyczne. W zależności od rodzaju logowania możemy zatem mieć kategoryzację użytkowników, która naśladuje powyższą kategoryzację dla logowań; tak więc mamy użytkowników SQL i użytkowników Windows, a ta ostatnia kategoria składa się z użytkowników zamapowanych na loginy użytkowników Windows i użytkowników zmapowanych na loginy grup Windows.

Cofnijmy się o krok do szybkiego przeglądu: login zapewnia dostęp do serwera, a aby dalej uzyskać dostęp do bazy danych, użytkownik zmapowany na login musi istnieć w bazie danych.

to jest link do pełnego posta.

David Leitner
źródło
Ten wpis na blogu został usunięty :(
Steven Schlansker
23

W skrócie,

Loginy będą miały dostęp do serwera.

i

Użytkownicy będą mieli dostęp do bazy danych.

Vikrant Kedari
źródło
6

Myślę, że jest to bardzo przydatne pytanie z dobrą odpowiedzią. Wystarczy dodać moje dwa centy z MSDN Utwórz stronę logowania :

Login jest podmiotem zabezpieczającym lub podmiotem, który może zostać uwierzytelniony przez bezpieczny system. Użytkownicy potrzebują loginu, aby połączyć się z SQL Server. Możesz utworzyć login na podstawie nazwy głównej systemu Windows (na przykład użytkownika domeny lub grupy domeny Windows) lub możesz utworzyć login, który nie jest oparty na jednostce systemu Windows (na przykład login SQL Server).

Uwaga:
Aby korzystać z uwierzytelniania programu SQL Server, aparat bazy danych musi używać uwierzytelniania w trybie mieszanym. Aby uzyskać więcej informacji, zobacz Wybieranie trybu uwierzytelniania.

Jako podmiot zabezpieczeń można przyznać uprawnienia do logowania. Zakres logowania obejmuje cały Aparat Bazodanowy. Aby połączyć się z określoną bazą danych w wystąpieniu programu SQL Server, login musi zostać zmapowany na użytkownika bazy danych. Uprawnienia wewnątrz bazy danych są nadawane i odmawiane użytkownikowi bazy danych, a nie logowaniu. Do logowania można nadać uprawnienia obejmujące całe wystąpienie programu SQL Server (na przykład uprawnienie CREATE ENDPOINT).

ilmatte
źródło
3
Jest to trochę jaśniejsze, jeśli umieścisz >na początku każdego akapitu w cytacie, aby był sformatowany jako cytat.
Sam
2
To było bardzo przydatne. Chociaż poprawnie skonfigurowałem użytkowników i loginy, system nie był skonfigurowany tak, aby zezwalać na uwierzytelnianie logowania SQL Server. Dlaczego mogę tworzyć dane logowania do SQL Server, skoro serwer nie pozwala im się zalogować, jest poza mną!
Mark Ireland,
Mnie też to zaskoczyło. Jeśli serwer nie jest obecnie w trybie mieszanym, spodziewałbym się, że serwer po prostu wyrzuci błąd podczas próby utworzenia logowania SQL Auth, co przynajmniej dałoby użytkownikowi wskazówkę wskazującą, że powinien najpierw włączyć uwierzytelnianie w trybie mieszanym.
arunsun
1

Wykres na loginach / użytkownikach z MS sql-docs

wprowadź opis obrazu tutaj

frmbelz
źródło