2009-07-15 77 views
138

我最近一直在运行SQL Server的许多不同领域,而这些领域通常都不会涉及到。其中一个令我困惑的是登录和用户区域。似乎它应该是一个非常简单的主题...SQL Server中用户和登录之间的区别

看来,每个登录只能有1个用户,每个用户只能有1个登录。

登录可以关联到多个表,从而将该用户关联到许多表。

所以我的问题是为什么即使有登录和用户?他们似乎几乎是一个相同的。有什么区别,或者我似乎错过了什么?

回答

162

“登录”将主体条目授予服务器。

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

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

上述每个对象都可以授予它自己的权限。请参阅下面的文章中的每个

25

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

+0

请您详细说明一下吗?在数据库服务器上而不是在数据库上进行更改的优点是什么? – HeyJude 2016-12-22 20:28:28

+0

假设您要备份和恢复数据库。还原通常在新服务器上完成。您可能不想在还原中对数据库进行更改。 – 2016-12-22 23:02:58

+0

为什么不在数据库恢复后执行更改? – HeyJude 2016-12-23 09:28:11

18

总之,

登录将有服务器的访问。

用户将有数据库的访问权限。

5

我认为这是一个非常有用的问题,答案很好。只需从MSDN添加我的两分钱Create a Login页面:

登录是安全主体,或者是可以通过安全系统进行身份验证的实体。用户需要登录才能连接到SQL Server。您可以基于Windows主体(例如域用户或Windows域组)创建登录,也可以创建不基于Windows主体(例如SQL Server登录)的登录。

注:
要使用SQL Server身份验证,数据库引擎必须使用混合模式身份验证。有关更多信息,请参阅选择认证模式。

作为安全主体,可以将权限授予登录。登录的范围是整个数据库引擎。要连接到SQL Server实例上的特定数据库,必须将登录名映射到数据库用户。数据库内的权限被授予并拒绝给数据库用户,而不是登录。具有整个SQL Server实例作用域的权限(例如,CREATE ENDPOINT权限)可以授予登录名。

15

我觉得这是一个非常好的MSDN blog post关于这个话题的Laurentiu Cristofor:

需要理解有关SQL Server 安全是有涉及到两个安全领域的第一个重要的事情 - 服务器 和数据库。服务器领域包含多个数据库领域。所有工作都是在某个数据库的上下文中完成的,但要获得 来完成这项工作,需要首先访问服务器,然后再访问数据库 。

通过登录授予对服务器的访问权限。有两个主要的 登录类别:SQL Server身份验证登录和Windows 身份验证登录。我通常会使用SQL登录名和Windows登录名的较短的 来引用这些名称。 Windows身份验证登录 可以登录映射到Windows用户或映射到 Windows组的登录名。因此,要连接到服务器,必须通过这些类型或登录之一访问 - 登录提供对 服务器领域的访问。

但登录是不够的,因为工作通常在数据库中完成 和数据库是分开的领域。访问数据库通过 用户授予。

用户被映射到登录名,映射由登录名和用户的SID 属性表示。如果 的SID值相同,登录将映射到数据库中的用户。根据登录类型的不同,我们可以将 分类为模仿以上 登录分类的用户分类;因此,我们有SQL用户和Windows用户,后一类包括映射到Windows用户登录 的用户和映射到Windows组登录的用户。

让我们退后一步,快速了解:登录提供了访问 到服务器,并得到进一步访问数据库,用户映射 到登录必须存在于数据库中。

that's the link转发到全文。

相关问题