你只恢复用户数据库,没有恢复系统数据库,所以数据库登录在新的数据库中不存在,而对应的数据库用户已随着用户数据库的恢复而存在于用户数据库的系统表中。 这样当你建新的登录时,对应的数据库用户默认也用同样的名字“bug”,因此会报错,说用户已存在。 两种解决办法: 1。建登录时,对应的数据库用户用和登录名不同的名字,但这样会有垃圾数据留在用户数据库的系统表中。 2。删除用户数据库系统表中的已存在的没有对应的登录名的那条数据,重新创建登录。 sql语句: --设置可以修改系统表 sp_configure 'allow update',1 reconfigure with override--删除系统表中的垃圾用户和其对应的操作许可 delete from syspermissions where grantee in (select uid from sysusers where name = 'bug') delete from sysusers where name = 'bug'--将设置改回 sp_configure 'allow update',0 reconfigure with override不过以上做法直接修改系统表,比较危险,使用lyxinfo()所说的sp_dropuser可能是个更好的选择。如果你的数据库用户有很多的权限许可设置,重新设置一遍很麻烦,那就可以用到一下办法(我也曾经用过) a.先新建一个登录,不需要映射到任何数据库。 b.然后修改sysusers的sid,让数据库用户和新建的登录建立联系。 update a set a.sid = b.sid from sysusers a,master..syslogins b where a.name = 'bug' and b.loginname = 'bug'
补充一点,以上是sqlserver2000的修改办法,如果是sqlserver7.0,好像还有一个字段suid也要修改,即: update a set a.sid = b.sid,a.suid = b.suid from sysusers a,master..syslogins b where a.name = 'bug' and b.loginname = 'bug'
这样当你建新的登录时,对应的数据库用户默认也用同样的名字“bug”,因此会报错,说用户已存在。
两种解决办法:
1。建登录时,对应的数据库用户用和登录名不同的名字,但这样会有垃圾数据留在用户数据库的系统表中。
2。删除用户数据库系统表中的已存在的没有对应的登录名的那条数据,重新创建登录。
sql语句:
--设置可以修改系统表
sp_configure 'allow update',1
reconfigure with override--删除系统表中的垃圾用户和其对应的操作许可
delete from syspermissions where grantee in (select uid from sysusers where name = 'bug')
delete from sysusers where name = 'bug'--将设置改回
sp_configure 'allow update',0
reconfigure with override不过以上做法直接修改系统表,比较危险,使用lyxinfo()所说的sp_dropuser可能是个更好的选择。如果你的数据库用户有很多的权限许可设置,重新设置一遍很麻烦,那就可以用到一下办法(我也曾经用过)
a.先新建一个登录,不需要映射到任何数据库。
b.然后修改sysusers的sid,让数据库用户和新建的登录建立联系。
update a set a.sid = b.sid from sysusers a,master..syslogins b where a.name = 'bug' and b.loginname = 'bug'
update a set a.sid = b.sid,a.suid = b.suid from sysusers a,master..syslogins b where a.name = 'bug' and b.loginname = 'bug'