用户和SQL Server中的登录名之间的区别


177

最近,我进入了SQL Server的许多不同区域,而这些区域通常是我不喜欢的。让我感到困惑的其中之一是“登录和用户”区域。似乎这应该是一个非常简单的主题...

似乎每个登录名只能有1个用户,每个用户只能有1个登录名。

登录名可以与多个表相关联,从而将该用户与多个表相关联。

所以我的问题是为什么还要有登录名和用户?他们似乎几乎是同一个人。有什么区别,或者我似乎缺少什么?

Answers:


202

“登录”将主体条目授予SERVER。

“用户”将登录条目授予单个数据库。

一个“登录”可以与许多用户关联(每个数据库一个)。

以上每个对象都可以在其自己的级别上授予权限。请参阅以下文章,以获取对每个文章的解释


7
难怪我找不到任何区别。我只是在使用1个数据库。谢谢。
corymathews

3
这个答案从根本上是正确的,但是据我了解,实际上可以授予特定用户访问该特定服务器上可用的多个数据库的权限。因此,登录到用户是一对一映射,而用户到数据库是一对多映射。
安德鲁·帕特

1
@coreymathews:“男孩遇见世界”中的时间更少,而书本上的时间更多!;)。
MSIS

但是现在MSDN建议使用一种类型的用户“在数据库中进行身份验证的用户”(推荐使用,以帮助使您的数据库更具可移植性)。链接:docs.microsoft.com/zh-cn/sql/t-sql/statements/… 这比传统的用户类型好吗?
光泽

32

拥有两者的一个原因是可以由数据库服务器进行身份验证,但可以将授权范围限定在数据库范围内。这样,如果将数据库移动到另一台服务器,则始终可以在数据库服务器上重新映射用户登录关系,但是不必更改数据库。


您能详细说明一下吗?在数据库服务器而不是数据库上进行更改有什么好处?
HeyJude

假设您要备份和还原数据库。还原通常是在新服务器上完成的。您可能不需要在还原中对数据库进行更改。
汤姆·瑞辛

为什么不只在数据库还原后进行更改?
HeyJude

1
附近的那家SQLAuthority话题的好60秒视频以了解更多信息blog.sqlauthority.com/2014/07/16/...
汤姆Resing

1
@HeyJude表示服务器与身份验证有关,如果不进行登录和用户分离,则数据库必须执行身份验证。
扎伊德·汗

24

我认为Laurentiu Cristofor撰写了一篇有关该主题的非常不错的MSDN博客文章

关于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
如果>在引号的每个段落的开头放置一个,以便将其格式化为引号,则会更清楚一些。
2015年

2
这非常有用。尽管我已经正确设置了用户和登录名,但是未将系统设置为允许SQL Server登录认证。当服务器不允许他们登录时,为什么我可以创建SQL Server登录名呢?
马克·爱尔兰

我也为此感到难过。如果服务器当前未处于混合模式,则我希望服务器在尝试创建SQL Auth登录时会抛出错误,这至少会为用户提供一个提示,表明他们应该首先打开混合模式身份验证。
arunsun

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.