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'
.
对于图像大小的抱歉,您需要在新选项卡中打开它才能正确查看.
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)
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)
gbn*_*gbn 11
你有一个孤立的用户,这不能用ALTER USER重新映射(因为)没有登录映射到.因此,您需要先运行CREATE LOGIN.
如果数据库级用户是
然后运行ALTER USER
在评论和更新之后编辑
sys.database_principals中的sid用于Windows登录.
因此,尝试创建并重新映射到SQL登录将失败
运行此命令以获取Windows登录名
SELECT SUSER_SNAME(0x0105000000000009030000001139F53436663A4CA5B9D5D067A02390)
Run Code Online (Sandbox Code Playgroud)