Разница между пользователем и логином в SQL Server

178

Недавно я сталкивался со многими различными областями SQL Server, с которыми обычно не связывался. Одна из них, которая меня смутила, это область логинов и пользователей. Похоже, это должна быть довольно простая тема ...

Похоже, что каждый логин может иметь только 1 пользователя, и каждый пользователь может иметь только 1 логин.

Логин может быть связан с несколькими таблицами, таким образом, привязывая этого пользователя ко многим таблицам.

Итак, мой вопрос, почему даже есть логин и пользователь? они кажутся почти одинаковыми. В чем различия, или что мне не хватает?

corymathews
источник

Ответы:

202

«Логин» предоставляет основную запись в СЕРВЕР.

«Пользователь» предоставляет вход для входа в единую базу данных.

Один «Логин» может быть связан со многими пользователями (по одному на базу данных).

Каждый из вышеперечисленных объектов может иметь разрешения, предоставленные ему на своем уровне. Смотрите следующие статьи для объяснения каждого

Скотт Айви
источник
7
Ах, не удивительно, я не мог найти разницу. Я просто работал с 1 базой данных. Спасибо.
corymathews
3
Этот ответ в корне верен, но, насколько я понимаю, конкретному пользователю фактически может быть предоставлен доступ к более чем одной базе данных, доступной на этом конкретном сервере. Таким образом, вход в систему для пользователя - это отображение 1-в-1, а для пользователя в базе данных - это отображение «1-ко-многим».
андрей паштет
1
@coreymathews: Меньше времени в "Boy Meets World" и больше времени на книги! ;).
MSIS
Но теперь MSDN рекомендует тип пользователя «Пользователи, которые проходят аутентификацию в базе данных» (рекомендуется, чтобы сделать вашу базу данных более переносимой). Ссылка: docs.microsoft.com/en-us/sql/t-sql/statements/… Это лучше, чем традиционный тип пользователя?
Sheen
32

Одной из причин того, что оба варианта, является проверка подлинности сервером базы данных, но авторизация может быть ограничена базой данных. Таким образом, если вы перенесете свою базу данных на другой сервер, вы всегда можете переназначить отношение входа в систему на сервере базы данных, но ваша база данных не должна изменяться.

Том Ресинг
источник
Можете ли вы уточнить? В чем преимущество изменений, выполняемых на сервере базы данных, а не в базе данных?
HeyJude
Скажем, вы хотите сделать резервную копию и восстановить базу данных. Восстановление часто выполняется на новом сервере. Возможно, вы не захотите вносить изменения в базу данных при восстановлении.
Том Ресинг
Почему бы просто не сделать изменения после восстановления базы данных?
HeyJude
1
Хорошее 60-секундное видео на эту тему в SQLAuthority для получения дополнительной информации 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.

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

это ссылка на полный пост.

Дэвид Лейтнер
источник
Этот пост был удален :(
Стивен Шланскер
23

Коротко,

Логины будут иметь доступ к серверу.

и

Пользователи будут иметь доступ к базе данных.

Викрант Кедари
источник
6

Я думаю, что это очень полезный вопрос с хорошим ответом. Просто, чтобы добавить мои два цента из MSDN Создать страницу входа в систему :

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

Примечание.
Чтобы использовать проверку подлинности SQL Server, компонент Database Engine должен использовать проверку подлинности в смешанном режиме. Для получения дополнительной информации см. Выбор режима аутентификации.

Как участник безопасности, разрешения могут быть предоставлены для входа в систему. Область входа в систему - весь компонент Database Engine. Чтобы подключиться к конкретной базе данных на экземпляре SQL Server, имя входа должно быть сопоставлено с пользователем базы данных. Разрешения внутри базы данных предоставляются и запрещаются пользователю базы данных, а не логину. Разрешения, которые имеют область действия всего экземпляра SQL Server (например, разрешение CREATE ENDPOINT), могут быть предоставлены для входа в систему.

ilmatte
источник
3
Немного понятнее, если >в начале каждого абзаца в кавычке ставится знак, поэтому он форматируется как кавычка.
Сэм
2
Это было так полезно. Хотя я правильно настроил пользователей и учетные записи, система не была настроена для проверки подлинности при входе в SQL Server. Почему я могу создавать учетные записи SQL Server, когда сервер не позволяет им входить в систему?
Марк Ирландия
Меня это тоже ошарашило. если сервер в данный момент не находится в смешанном режиме, то я ожидал бы, что сервер просто выдаст ошибку при попытке создать имя входа SQL Auth, что по крайней мере даст пользователю подсказку, указывающую, что он должен сначала включить проверку подлинности в смешанном режиме.
Арунсун