将登录名映射到创建时未映射到登录名的用户

use*_*285 6 security sql-server sql-server-2012

这个问题以前有人问过,但我没有看到任何答案(/sf/ask/452816941/

当用户最初是使用 GUI 中的“SQL User without login”用户类型选项创建时,如何将登录映射到用户?我正在使用 SQL Server 2012

Tho*_*ger 6

通过在 SSMS 的创建用户对话框中选择无需登录的 SQL 用户,这是生成的 T-SQL(除了提供的用户名之外没有其他选项):

USE [AdventureWorks2012]
GO
CREATE USER [User1] WITHOUT LOGIN
GO
Run Code Online (Sandbox Code Playgroud)

如果您要创建一个登录名并尝试使用新登录名更改用户,例如以下尝试:

create login TestLogin1
with password = 'p@$$w0rd';
go

use AdventureWorks2012;
go

alter user User1
with login = TestLogin1;
go
Run Code Online (Sandbox Code Playgroud)

您将收到以下错误:

消息 33016,级别 16,状态 1,第 8 行
用户无法重新映射到登录。只能对映射到 Windows 或 SQL 登录名的用户进行重新映射。

因此,我认为您无法在不重新创建的情况下将登录链接到此类用户。它应该相对轻松,因为您可以编写用户脚本,但将参数更改为WITHOUT LOGIN您希望将其映射到的任何登录名。

编辑:正如下面 Aaron 所指出的,在进行任何更改之前,请确保您注意权限和角色成员资格。如果这是所需的行为,您需要确保可以返回到当前所处的权限状态。

  • “相对轻松”仅当现有用户没有大量权限、属于一堆角色等时。您可能希望首先清点权限和角色成员资格。:-) (5认同)