2、正如上面所说的,附加或恢复一个数据库之后你会看到的一些错误包括: Msg229,Level14,State1 %spermissiondeniedonobject%.*s,database%.*s,oeasSQLServerLogIn,SIDasSQLServerSIDFROMsys.syslogins sysusers e]='TestUser3' GO 以下的结果表明SQLServer登录名中的SID和数据库用户id的SID是不一样的,这也表明了这正是导致问题出现的原因。 现在我们对这个问题有了更深入的了解,现在是时候利用一些有用的命令去分析
3、和解决问题了。 我已经用以上四个用户把AdventureWorks数据库从一个实例还原到另一个实例上。现在为了分析在我的还原数据库中有多少个孤立用户,我将运行以下的T-SQL命令,这些命令将产生所有孤立用户的列表并且在这个例子中所有的用户都是在孤立的。 用来产生孤立用户列表的命令 USEadventureWorks GO12下一页>>>>这篇文章来自..,。sp_change_users_loginAction='Report' GO 现在我们已经有了孤立用户的列表,我们可以开始着手解决这个问题。为了克服这个问题,你需要把用户(来自sysusers
4、表)的SIDs链接到主从数据库的有效登录名中。下面的命令TestUser1指定的数据库用户重新映射到TestUser1指定的服务器登录名账户。 用来映射一个孤立用户的命令 USEAdventureePattern='TestUser1', LoginName='TestUser1' GO 或者如果你确定SQLServer登录名和映射的数据库孤立用户名一样,那么接着你可以使用更短的命令,比如以下TestUser2的例子。 用来映射一个孤立用户的命令 EXECsp_change_users_login'Auto_Fix'
5、;,'TestUser2' GO 这两种命令都可以把用户映射到登录名,并且它们将不再是孤立的。 如果一个登录名不存在,你必须在做映射之前先创建这个登录名。创建登录名的一种便捷方式是使用以下将会创建登录名接着把登录名映射到用户的命令。 用来把一个孤立用户映射到一个还未出现但是将要创建的登录名的命令 EXECsp_change_users_login'Auto_Fix','TestUser3',null,'pwd' GO 总结应用的T-SQL 在以上过程中,使用了存储过程sp_change_users