lee*_*rog 11 sql-server permissions t-sql
这似乎是一个愚蠢的问题,但尽管进行了一些研究,但我无法仅找到有关此的任何信息(可能是由于使用了错误的术语)。
是否可以将多个服务器登录(sql server 身份验证)记录到单个数据库用户(具有通过成为数据库角色成员分配的权限)?
我有几十个 sql 登录(sql server 身份验证),它们需要从中央数据库读取一个设置,我宁愿将所有这些登录都映射到目标数据库中的单个 DB 用户,而不是为每个登录创建一个自己的 DB 用户。
如果是,那么正确的 T-SQL 语法是什么?
Ken*_*her 20
首先要确定术语。Login 是实例级别的安全主体 ( sys.server_principals),而 User 是数据库级别的安全主体 ( sys.database_principals)。它们通过 SID(安全标识符)连接在一起。如果您查看上面的系统视图,您可以看到它们是如何通过 SID 以 1:1 格式连接在一起的。这是 1 个登录到数据库中的 1 个用户。一个登录名可以有多个用户,但他们必须在不同的数据库中。
因此,您需要在您的数据库中为您想要访问它的每个登录创建一个用户。这是一个足够简单的命令。
CREATE USER [UserName] FROM LOGIN [LoginName]
Run Code Online (Sandbox Code Playgroud)
从那里您可以将所有用户置于一个(或多个)角色中。角色是具有权限并与每个用户(对于数据库角色)或登录名(例如角色)共享这些权限的容器。有一个名为的内置数据库角色db_datareader,它提供对数据库中每个表和视图的读取访问权限。您可以将所有用户添加到该角色。但是,更好的主意是创建一个新角色并将其添加到db_datareader角色中。然后将所有用户添加到新角色。这样做的好处是,如果您想向组添加其他权限,只需更改角色的权限即可。
通过以下方式创建角色:
CREATE ROLE RoleName
Run Code Online (Sandbox Code Playgroud)
将用户添加到角色(或将一个角色添加到另一个角色)
EXEC sp_addrolemember 'RoleName','UserName'
Run Code Online (Sandbox Code Playgroud)
或者如果您在 2012 年或更高
ALTER ROLE [RoleName] ADD MEMBER [UserName]
Run Code Online (Sandbox Code Playgroud)