我偶尔使用 SQL Server Management Studio 中的数据库备份和恢复将数据库 (SQL Express 2012) 从开发机器移动到服务器,反之亦然。
每当我这样做时,目标计算机上的应用程序都无法访问数据库,直到我从数据库用户(SQL Server Management Studio 中的数据库、安全性、用户)中删除他们使用的用户“george”,并将其重新添加为安全、登录、乔治/属性、用户映射下的所有者。
有一个更好的方法吗?好像有点绕。
这是登录名和用户之间的区别以及它们之间的关系:
SQL 身份验证登录和数据库用户在还原时通常会发生的情况是 SIDS 将不同步,从而破坏关系。必须先修复这种关系,然后才能使用该登录名连接到数据库,因为在 SQL Server 眼中,这些主体不再连接。您可以使用以下 SQL 解决此问题:
ALTER USER [foo] WITH LOGIN=[foo]
您可以在数据库上下文中使用以下查询来检查孤儿:
select dp.name [user_name] ,dp.type_desc [user_type] ,isnull(sp.name,'Orhphaned!') [login_name] ,sp.type_desc [login_type] from sys.database_principals dp left join sys.server_principals sp on (dp.sid = sp.sid) where dp.type in ('S','U','G') and dp.principal_id >4 order by sp.name