我试图通过SQL Server Management Studio访问我的托管服务器的数据库,登录之前一切正常,但当我使用命令use myDatabase
时,它给我这个错误:
The server principal "****" is not able to access the database "****" under the current security context.
我搜索了一遍,主机服务提供商列出了解决该问题的this解决方案。
但这对我来说不起作用,可能是因为它是针对SQL Server Management Studio 2008的,而我使用的是SQL Server Management Studio 2012。
这会是一个问题吗?如果是,那么谁能告诉我它在SSMS 2012中的替代方案?
发布于 2013-10-01 04:56:22
检查您的用户是否映射到您尝试登录的数据库。
发布于 2015-02-24 07:51:56
在我们的PROD环境中,我们在将报告部署到SSRS时遇到了相同的错误。人们发现,这个问题甚至可以用“use”语句重现。解决方案是将用户的GUID帐户引用与相关数据库重新同步(即,像恢复数据库后那样使用"sp_change_users_login“)。附加了一个用于重新同步所有帐户的股票(光标驱动)脚本:
USE <your database>
GO
-------- Reset SQL user account guids ---------------------
DECLARE @UserName nvarchar(255)
DECLARE orphanuser_cur cursor for
SELECT UserName = su.name
FROM sysusers su
JOIN sys.server_principals sp ON sp.name = su.name
WHERE issqluser = 1 AND
(su.sid IS NOT NULL AND su.sid <> 0x0) AND
suser_sname(su.sid) is null
ORDER BY su.name
OPEN orphanuser_cur
FETCH NEXT FROM orphanuser_cur INTO @UserName
WHILE (@@fetch_status = 0)
BEGIN
--PRINT @UserName + ' user name being resynced'
exec sp_change_users_login 'Update_one', @UserName, @UserName
FETCH NEXT FROM orphanuser_cur INTO @UserName
END
CLOSE orphanuser_cur
DEALLOCATE orphanuser_cur
发布于 2018-07-12 22:10:09
这对我很有效:
use <Database>
EXEC sp_change_users_login @Action='update_one', @UserNamePattern='<userLogin>',@LoginName='<userLogin>';
问题可以通过以下方式可视化:
SELECT sid FROM sys.sysusers WHERE name = '<userLogin>'
SELECT sid FROM sys.syslogins WHERE name = '<userLogin>';
https://stackoverflow.com/questions/19009488
复制相似问题