我们在第一个名为“SQL01”的 SQL 服务器实例上有一个名为“foo”的数据库,该数据库每晚通过 Snap Manager for SQL Server 的快照进行备份,然后 flex 克隆并恢复到第二个名为“SQL02”的服务器实例。在数据库 foo 中,有一个名为“someuser”的 SQL 用户,具有数据读取器和存储过程权限。
恢复操作后,我无法使用 someuser 用户访问 SQL02 上的 foo 数据库。我可以看到权限似乎已为该用户正确设置,但无法访问数据库。错误是“服务器主体“someuser”无法在当前安全上下文中访问数据库“foo”。
如果我从数据库中删除用户,然后再次添加,则一切正常。有什么想法吗?
答案1
sp_change_users_login 是一种旧的做事方式,由于您正在使用 SQL Server 2005,请尝试使用 ALTER USER 语法。
http://sqlblog.com/blogs/greg_low/archive/2009/02/02/much-ado-about-logins-and-sids.aspx
答案2
查看更改用户登录 执行 sp_change_users_login '报告',如果有结果,则使用 sp_change_users_login 'autofis','someuser'
答案3
您可能会发现需要从已恢复的数据库中删除该用户,然后在服务器安全下打开该用户并将其权限再次设置到该数据库中
答案4
为了避免此问题,请将您的用户(正在进行备份的用户)添加为备份数据库的用户,并且您的用户应该在新实例中具有(登录)访问权限。