SQL Server中用户和login之间的区别

我最近遇到了SQL Server的许多不同的领域,我通常不会搞砸的。 其中有一个让我困惑的是login和用户区域。 似乎它应该是一个非常简单的主题…

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

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

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

“login”将主要条目授予服务器。

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

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

上述每个对象都可以拥有自己的权限。 请参阅以下文章,了解每个解释

  • 校长
  • 数据库用户

同时拥有两个authentication的原因是数据库服务器可以完成身份validation,但授权可以限定在数据库范围内。 这样,如果将数据库移动到其他服务器,则可以始终重新映射数据库服务器上的用户 – login关系,但数据库不必更改。

简而言之,

login将有服务器的访问权限。

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

我认为有一个非常好的MSDN博客文章关于这个话题由Laurentiu Cristofor:

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

通过login授予访问服务器的权限。 主要有两类login:SQL Serverauthenticationlogin和Windowsauthenticationlogin。 我通常会使用SQLlogin名和Windowslogin名的较短名称来引用这些名称。 Windows身份validationlogin可以是login映射到Windows用户或login映射到Windows组。 因此,要连接到服务器,必须通过这些types或login之一访问 – login提供对服务器领域的访问。

但login是不够的,因为工作通常在数据库中完成,数据库是独立的领域。 用户可以访问数据库。

用户被映射到login,映射由login和用户的SID属性表示。 如果login名的SID值相同,login将映射到数据库中的用户。 根据logintypes的不同,我们可以对用户进行分类,模仿login的上述分类; 所以,我们有SQL用户和Windows用户,后一类包括映射到Windows用户login的用户和映射到Windows组login的用户。

让我们回过头来简要概述一下:一个login提供 对服务器的 访问 并进一步访问数据库,映射 到login 的用户 必须存在于数据库中。

这是全文的链接 。

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

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

注意:
要使用SQL Server身份validation,数据库引擎必须使用混合模式身份validation。 有关更多信息,请参阅selectauthentication模式。

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