Різниця між Користувачем та Входом у SQL Server


178

Я нещодавно зіткнувся з багатьма різними областями SQL Server, з якими я звичайно не возиться. Один з них, який мене збентежив, - це область Логін та Користувачі. Здається, це має бути досить проста тема ...

Здається, що кожен логін може мати лише 1 користувача, а кожен користувач може мати лише 1 логін.

Логін може бути пов'язаний з декількома таблицями, тим самим асоціюючи цього користувача з багатьма таблицями.

Тож у мене питання, чому навіть є логін та користувач? вони, здається, майже однакові. У чому полягають відмінності, або що, здається, мені не вистачає?

Відповіді:


202

"Логін" надає основний запис СЕРВЕРУ.

"Користувач" надає запис для входу в єдину DATABASE.

Один "Логін" може бути пов'язаний з багатьма користувачами (по одному на базу даних).

Кожен з перерахованих вище об’єктів може мати дозволи, надані йому на своєму рівні. Дивіться наступні статті для пояснення кожної


7
Ну недарма я не зміг знайти різниці. Я просто працював з 1 базою даних. Дякую.
corymathews

3
Ця відповідь принципово правильна, але, як я розумію, конкретному користувачеві може бути наданий доступ до більшої кількості баз даних, які є на цьому конкретному сервері. Таким чином, вхід до користувача - це відображення 1 на 1, але база даних "користувач до бази даних" - це відображення "1 на багато".
андрю паштет

1
@coreymathews: Менше часу на "Хлопчик зустрічає світ" і більше часу на книги! ;).
MSIS

Але тепер MSDN рекомендує тип користувача "Користувачі, які підтверджують автентифікацію в базі даних" (рекомендується допомогти зробити вашу базу даних більш портативною). Посилання: docs.microsoft.com/en-us/sql/t-sql/statements/… Це краще, ніж традиційний тип користувача?
Шин

32

Однією з причин є те, що автентифікація може бути виконана сервером баз даних, але авторизація може бути передана до бази даних. Таким чином, якщо ви перемістите свою базу даних на інший сервер, ви завжди можете перезавантажувати відносини користувача-входу на сервері баз даних, але ваша база даних не повинна змінюватися.


Чи можете ви, будь ласка, докладно? Яка перевага від зміни, яка відбувається на сервері баз даних, а не на базі даних?
HeyJude

Скажімо, ви хочете створити резервну копію та відновити базу даних. Відновлення часто проводиться на новому сервері. Можливо, вам не захочеться вносити зміни до бази даних під час відновлення.
Том Резінг

Чому б не просто змінити після відновлення бази даних?
HeyJude

1
На SQLAuthority є хороше 60-секундне відео на цю тему для отримання додаткової інформації blog.sqlauthority.com/2014/07/16/…
Том Резінг,

1
@HeyJude Означає, що сервер займається автентифікацією, те, що базі даних доведеться робити, якби не вхід та розділення користувачів.
Заїд Хан

25

Я думаю, що по-справжньому хороша публікація в блозі MSDN на цю тему від Laurentiu Cristofor:

Перше важливе, що потрібно розуміти щодо безпеки SQL Server, це те, що тут задіяні дві сфери безпеки - сервер та база даних. Область сервера охоплює кілька областей баз даних. Вся робота виконується в контексті якоїсь бази даних, але для того, щоб виконати роботу, спочатку потрібно мати доступ до сервера, а потім мати доступ до бази даних.

Доступ до сервера надається через логіни. Існує дві основні категорії входів: реєстрація з автентифікацією на SQL Server та автентифіковані входи в систему Windows. Як правило, я посилаюся на них, використовуючи короткі назви входів SQL та входи в Windows. Автентифіковані входи в систему Windows можуть бути або реєстраційними картами для користувачів Windows, або входами, відображеними у групах Windows. Отже, щоб мати змогу підключитися до сервера, потрібно мати доступ через один із цих типів або вхід - логіни забезпечують доступ до царини сервера.

Але входу недостатньо, тому що робота, як правило, виконується в базі даних, а бази даних - це окремі області. Доступ до баз даних надається через користувачів.

Користувачі відображаються на логінах, а відображення виражається властивістю SID для входів та користувачів. Логін відображає користувача в базі даних, якщо їх значення SID однакові. Отже, залежно від типу входу, ми можемо мати категоризацію користувачів, яка імітує вищевказану категоризацію для входу; Таким чином, у нас є користувачі SQL та користувачі Windows, і остання категорія складається з користувачів, відображених у входах користувачів Windows, та користувачів, відображених на групові входи в систему Windows.

Давайте зробимо крок назад для швидкого огляду: логін забезпечує доступ до сервера та для подальшого отримання доступу до бази даних, відображеної на карті користувача на логін, повинен існувати в базі даних.

ось посилання на повну публікацію.


Цю публікацію в блозі знято :(
Стівен Шланскер


6

Я думаю, що це дуже корисне питання з хорошою відповіддю. Просто для додання моїх двох центів із MSDN Створити сторінку входу :

Логін - це принцип безпеки або об'єкт, який може бути аутентифікований захищеною системою. Користувачам потрібен логін для підключення до SQL Server. Ви можете створити логін на основі принципу Windows (наприклад, користувача домену або групи домену Windows) або створити логін, який не базується на принципі Windows (наприклад, вхід на SQL Server).

Примітка.
Щоб використовувати автентифікацію SQL Server, двигун бази даних повинен використовувати автентифікацію в змішаному режимі. Для отримання додаткової інформації див. Вибір режиму аутентифікації.

Як основна безпека, дозволи можуть бути надані для входу в систему. Область входу - це весь механізм баз даних. Щоб підключитися до певної бази даних на екземплярі SQL Server, потрібно ввести логін для користувача бази даних. Дозволи в межах бази даних надаються та відмовляються користувачеві бази даних, а не входу в систему. Дозволи, які охоплюють весь екземпляр SQL Server (наприклад, дозвіл CREATE ENDPOINT), можуть бути надані для входу.


3
Трохи зрозуміліше, якщо ви ставите >на початку кожного абзацу цитату, щоб вона була відформатована як цитата.
Сем

2
Це було так корисно. Хоча я правильно налаштував користувачів та входи, система не була налаштована на дозвіл на автентифікацію входу на SQL Server. Чому я можу створювати входи в систему SQL Server, коли сервер не дозволить їм увійти, - це поза мною!
Марк Ірландії

Мене теж спотикало це. якщо сервер зараз не перебуває в змішаному режимі, то я б очікував, що сервер просто видасть помилку під час спроби створити логін SQL Auth, що, як мінімум, надасть користувачеві підказку, що вказує, що вони повинні спочатку увімкнути автентифікацію змішаного режиму.
arunsun

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.