我设置了一个 SQL Server 作业来备份和验证我的所有数据库
执行此操作后,在我的大多数数据库中,该用户不再列出。该用户还在那里,但没有关联。
什么原因造成这种情况?
答案1
您是否在不同的服务器实例上恢复数据库?数据库用户(在数据库级别的安全性下列出)与服务器实例登录名(在服务器级别的安全性下列出)不同。如果您将数据库恢复到不同的实例,则通常数据库用户将被解除关联,因为服务器实例登录名不存在于目标实例上。即使您在目标实例上创建与原始实例同名的登录名,它也不会起作用,因为新登录名具有不同的安全标识符 (SID)。
您可以使用sp_help_revlogin
存储过程在服务器实例之间复制登录名。这将生成一个脚本,该脚本将使用相同的 SID、密码等创建登录名。在目标服务器上运行该脚本,数据库用户将再次与服务器登录名相关联。
源代码和更多关于如何使用的信息sp_help_revlogin
可以在这里。
答案2
数据库是否已还原到其他服务器?如果是这种情况,则该服务器上任何 SQL Server 登录的 SID 都将不同。数据库用户根据 SID 映射到登录,因此用户最终会变得孤立。
要更新用户以匹配现有登录,请使用以下查询:
ALTER USER 用户名 WITH LOGIN = loginname