为没有登录的用户分配登录名(SQL Server)

Rei*_*ica 43 sql-server sql-server-2008

我的数据库中有一个用户没有相关的登录信息.它似乎是在没有登录的情况下创建的.

每当我尝试使用此用户连接到数据库时,我都会收到以下错误:

Msg 916, Level 14, State 1, Line 1
The server principal "UserName" is not able to access the database 
"DatabaseName" under the current security context.
Run Code Online (Sandbox Code Playgroud)

我想为这个用户指定一个登录名,以便我可以实际使用它来访问数据库.我尝试了以下脚本将登录与用户关联起来.

USE [DatabaseName]
ALTER USER [UserName]
WITH LOGIN = [UserName]
Run Code Online (Sandbox Code Playgroud)

但这给了我以下错误:

Msg 33016, Level 16, State 1, Line 2
The user cannot be remapped to a login. Remapping can only be done for users 
that were mapped to Windows or SQL logins.
Run Code Online (Sandbox Code Playgroud)

有什么办法可以为这个用户分配登录信息吗?我不想从头开始,因为这个用户有很多需要重新设置的权限.

编辑:回应Philip Kelley的问题,这是我跑步时得到的select * from sys.database_principals where name = 'username'.

SQL用户

对于图像大小的抱歉,您需要在新选项卡中打开它才能正确查看.

EDIT2:

好的,我已按照gbn的建议删除了现有的LOGIN,并且我使用以下脚本创建一个与用户具有相同SID的新LOGIN.

CREATE LOGIN [UserName] 
WITH PASSWORD=N'Password1', 
DEFAULT_DATABASE=[DatabaseName], 
CHECK_EXPIRATION=OFF, 
CHECK_POLICY=OFF, 
SID=0x0105000000000009030000001139F53436663A4CA5B9D5D067A02390
Run Code Online (Sandbox Code Playgroud)

它现在给我以下错误消息,看起来SID对于LOGIN的SID字段来说太长了.

Msg 15419, Level 16, State 1, Line 1
Supplied parameter sid should be binary(16).
Run Code Online (Sandbox Code Playgroud)

我没有划桨就在小河上吗?

Bre*_*gby 52

sp_change_users_login 已弃用.

更容易的是:

ALTER USER usr1 WITH LOGIN = login1;
Run Code Online (Sandbox Code Playgroud)

  • 阅读问题,这是我尝试的第一件事,它产生了以下错误:`Msg 33016,Level 16,State 1,Line 2用户无法重新映射到登录.只能对映射到Windows或SQL登录的用户进行重新映射 (3认同)
  • 我知道这个答案无助于回答原来的问题,但这对我有用。 (2认同)

ris*_*123 36

我发现这个问题仍然有用,但在我的案例中没有明确回答.

使用SQL Server 2012和孤立的SQL_USER这是修复;

USE databasename                      -- The database I had recently attached
EXEC sp_change_users_login 'Report'   -- Display orphaned users
EXEC sp_change_users_login 'Auto_Fix', 'UserName', NULL, 'Password'
Run Code Online (Sandbox Code Playgroud)

  • 这适用于真正的孤立用户,但如果用户属于"没有登录的SQL用户"类型,则不会执行任何操作 (3认同)
  • 非常有用的选项。在孤立的用户帐户+1上完美运行。 (2认同)

gbn*_*gbn 11

你有一个孤立的用户,这不能用ALTER USER重新映射(因为)没有登录映射到.因此,您需要先运行CREATE LOGIN.

如果数据库级用户是

  • 在Windows登录中,映射将通过AD SID自动修复
  • SQL登录,使用sys.database_principals中的"sid" 作为登录的SID选项

然后运行ALTER USER

在评论和更新之后编辑

sys.database_principals中的sid用于Windows登录.

因此,尝试创建并重新映射到SQL登录将失败

运行此命令以获取Windows登录名

SELECT SUSER_SNAME(0x0105000000000009030000001139F53436663A4CA5B9D5D067A02390)
Run Code Online (Sandbox Code Playgroud)