在 SQL 2008 实例上,我有一个具有 dbcreator 和 public 角色的登录名。当我将数据库还原到此服务器上时,我无法使用该数据库,因为其中的所有用户 -> 登录名映射都已损坏(不同服务器上的 ID 不同)。
有一个 sp_change_users_login 'Auto_Fix', userName 存储过程,但我无法使用它,因为我首先无法访问数据库。最后,由于我没有 securityAdmin 角色,我无法将任何登录名映射到数据库用户。
有没有办法让我自己有权在恢复过程中访问数据库?
答案1
授权管理员可以编写一个辅助程序来修复映射。然后,它可以对该程序进行签名,并通过代码签名为该程序提供必要的授权(请参阅对存储过程进行签名)。然后它可以授予您此辅助程序的执行权限,并且您将能够在没有 securityAdmin 权限的情况下执行操作(修复损坏的登录)。
答案2
不,抱歉。
“securityAdmin” 处于服务器级别,与任何数据库权限无关
注意(仅供参考,目前用处不大!)此问题已针对 SQL Server 2011(又名 Denali)的“包含数据库”进行了修复
答案3
据我所知,您需要一个拥有 dbo 的人来帮您修复这个问题。我可能错了,也许有后门方法 - 但这基本上是按照设计进行的。您只有 dbcreator,因此一旦创建了数据库,您就无法在数据库内部乱搞。
答案4
我最终的解决方案是批量导入数据库中的每个表,而不是恢复。