理解和处理SQL Server数据库中的孤立用户
2008-10-22 10:07:33 来源:WEB开发网另一方面,映射到另一个数据库用户的信息存储在系统表sysusers的数据库中。它包括数据库用户名和相对应的SQL Server登录名的安全标示符(SID)。这个数据库用户的权限用于在数据库中授权。
所以我们可以说,每次我们创建一个SQL Server登录名,就可以在SQL Server 2005 的 sys.server_principals系统目录视图或者sys.syslogins视图上看到它。一个数据库中的sysusers表的表项链接到上图显示的SQL Server 登录名中。这个链接通过一个名为SID的栏创建。
如果我们通过某些过程把我们的数据库迁移到另一个SQL Server实例上,那么这个新的服务器可能会或可能不会拥有相同的登录名并且这些登录名的SIDs可能与原来服务器中的登录名的SIDs不一样。这意味着,迁移的数据库中的sysusers表具有与新的服务器中的主从数据库的登录名信息不符的SIDs。因此,我们得到孤立用户(orphaned users)。
以下将作为一个例子,我在AdventureWorks数据库中创建和配置四个具有不同权限的用户。这些用户是TestUser1,TestUser2,TestUser3和TestUser4。当我把这个数据库备份还原到SQL Server 2005实例中,虽然用户在AdventureWorks数据库中显示并且登录名存在于新的服务器中,但是这些登录名没有一个访问到新的恢复数据库中。
所以记住这个情景,让我们先来执行一些查询,看看SQL Server 登录名SIDs(如果SQL Server登录名显示了)和TestUser3的数据库用户SIDs之间的差异。
用来查看SID中的差异的脚本
USEMASTER
GO
SELECTnameasSQLServerLogIn,SIDasSQLServerSIDFROMsys.syslogins
WHERE[name]='TestUser3'
GO
USEAdventureWorks
GO
SELECTnameDataBaseID,SIDasDatabaseSIDFROMsysusers
WHERE[name]='TestUser3'
GO
更多精彩
赞助商链接