将多个服务器登录名映射到一个数据库用户


11

这似乎是一个愚蠢的问题,但是尽管进行了一些研究,但我仍然无法找到与此有关的任何信息(可能是由于使用了错误的术语)。

是否可以将多个服务器登录名(SQL Server身份验证)记录到单个数据库用户(该用户具有作为数据库角色的成员所分配的权限)?

我有几十个sql登录名(sql服务器身份验证),它们需要从中央数据库读取一个设置,我宁愿将所有这些登录名映射到目标数据库中的单个DB用户,而不是为每个登录名创建一个自己的DB用户。

如果是,正确的T-SQL语法是什么?


当您说“服务器登录”时,您是指Windows帐户还是SQL服务器帐户?
Phil Sumner 2014年

我说的是SQL Server帐户。将编辑问题进行澄清
leepfrog 2014年

如何创建一个ROLE,然后将用户添加到该角色。这样,您只需向角色授予权限。这将帮助您更好地管理安全性。另外,什么是sql server版本-2008R2,2012?
Kin Shah

Answers:


19

首先要确保术语。登录名是实例级别的安全主体(sys.server_principals),用户是数据库级别的安全主体(sys.database_principals)。它们通过SID(安全标识符)连接在一起。如果您在上面的系统视图中查看,则可以看到它们如何通过SID以1:1格式连接在一起。那就是1登录数据库中的1个用户。一个登录名可以有多个用户,但是它们必须位于不同的数据库中。

因此,您需要在数据库中为要访问的每个登录名创建一个用户。这是一个简单的命令。

CREATE USER [UserName] FROM LOGIN [LoginName]

从那里,您可以将所有用户置于一个(或多个)角色中。角色是具有权限的容器,并与每个用户(对于数据库角色)或登录名(对于实例角色)共享这些权限。有一个名为的内置数据库角色db_datareader,该角色提供对数据库中每个表和视图的读取访问权限。您可以将所有用户添加到该角色。但是,一个更好的主意是创建一个新角色并将其添加到db_datareader角色中。然后将所有用户添加到新角色。这样做的好处是,如果要向组添加其他权限,只需更改角色的权限即可。

通过以下方式创建角色:

CREATE ROLE RoleName

将用户添加到角色(或一个角色添加到另一个)

EXEC sp_addrolemember 'RoleName','UserName'

或者您的年纪在2012年或更高

ALTER ROLE [RoleName] ADD MEMBER [UserName]

感谢详细的解释和肯尼斯提供的背景信息,我不清楚的是That's 1 Login to 1 User in a database
leepfrog 2014年
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.