最近,我进入了SQL Server的许多不同区域,而这些区域通常是我不喜欢的。让我感到困惑的其中之一是“登录和用户”区域。似乎这应该是一个非常简单的主题...
似乎每个登录名只能有1个用户,每个用户只能有1个登录名。
登录名可以与多个表相关联,从而将该用户与多个表相关联。
所以我的问题是为什么还要有登录名和用户?他们似乎几乎是同一个人。有什么区别,或者我似乎缺少什么?
最近,我进入了SQL Server的许多不同区域,而这些区域通常是我不喜欢的。让我感到困惑的其中之一是“登录和用户”区域。似乎这应该是一个非常简单的主题...
似乎每个登录名只能有1个用户,每个用户只能有1个登录名。
登录名可以与多个表相关联,从而将该用户与多个表相关联。
所以我的问题是为什么还要有登录名和用户?他们似乎几乎是同一个人。有什么区别,或者我似乎缺少什么?
Answers:
“登录”将主体条目授予SERVER。
“用户”将登录条目授予单个数据库。
一个“登录”可以与许多用户关联(每个数据库一个)。
以上每个对象都可以在其自己的级别上授予权限。请参阅以下文章,以获取对每个文章的解释
拥有两者的一个原因是可以由数据库服务器进行身份验证,但可以将授权范围限定在数据库范围内。这样,如果将数据库移动到另一台服务器,则始终可以在数据库服务器上重新映射用户登录关系,但是不必更改数据库。
我认为Laurentiu Cristofor撰写了一篇有关该主题的非常不错的MSDN博客文章:
关于SQL Server安全性需要了解的第一件事是涉及两个安全领域-服务器和数据库。服务器领域包含多个数据库领域。所有工作都是在某个数据库的上下文中完成的,但是要完成这项工作,首先需要访问服务器,然后才能访问数据库。
通过登录授予对服务器的访问权限。登录名主要有两类:SQL Server身份验证的登录名和Windows身份验证的登录名。我通常会使用SQL登录名和Windows登录名的简称来指代这些。Windows身份验证的登录名可以是映射到Windows用户的登录名,也可以是映射到Windows组的登录名。因此,要能够连接到服务器,必须通过以下类型之一或登录名进行访问-登录提供对服务器领域的访问。
但是登录还不够,因为登录通常是在数据库中完成的,而数据库是单独的领域。通过用户授予对数据库的访问权限。
用户映射到登录名,并且映射由登录名和用户的SID属性表示。如果登录名映射到数据库中的用户,则其SID值相同。因此,根据登录类型的不同,我们可以对用户进行类似于上述登录分类的分类。因此,我们有SQL用户和Windows用户,后者属于映射到Windows用户登录名的用户和映射到Windows组登录名的用户。
让我们退后一步以快速浏览一下:登录提供 对服务器的 访问,并进一步获得对数据库的访问,映射到登录名的用户必须存在于数据库中。
简而言之,
登录名将具有服务器的访问权限。
和
用户将有权访问数据库。
我认为这是一个非常有用的问题,答案很好。只需从MSDN中添加两美分,即可创建一个登录页面:
登录名是安全主体,或者是可以由安全系统进行身份验证的实体。用户需要登录才能连接到SQL Server。您可以基于Windows主体(例如域用户或Windows域组)创建登录名,也可以创建不基于Windows主体的登录名(例如SQL Server登录名)。
注意:
要使用SQL Server身份验证,数据库引擎必须使用混合模式身份验证。有关更多信息,请参见选择身份验证模式。作为安全主体,可以授予登录权限。登录的范围是整个数据库引擎。若要连接到SQL Server实例上的特定数据库,必须将登录名映射到数据库用户。数据库内部的权限被授予和拒绝给数据库用户,而不是登录名。可以将具有SQL Server整个实例范围的权限(例如CREATE ENDPOINT权限)授予登录名。
>
在引号的每个段落的开头放置一个,以便将其格式化为引号,则会更清楚一些。
来自MS sql-docs的登录名/用户图