网站近日常常遭到攻击,好几回数据库挂马,前几天把论坛升级了,今天又升级了数据库,把以前的MSSQL 2000 升级到MSSQL 2005,用的是数据库还原功能还原的,遇到了这个账号孤立的问题。web
什么是孤立用户的问题?sql
好比,之前的数据库的不少表是用户test创建的,可是当咱们恢复数据库后,test用户此时就成了孤立用户,没有与之对应的登录用户名,哪怕你创建了一个test登陆用户名,并且是之前的用户密码,用该用户登陆后一样没办法操做之前属于test的用户表。数据库
Google 了一下,有不少解决方案,不过不少方案没办法实现,由于MSSQL 2005的权限的关系。这里介绍一个通过我验证的解决方法:sqlserver
咱们在创建了一样名称的数据库登陆用户后,数据库中的表咱们照样不能使用时由于sid的不一样,就是系统登陆表和数据库用户表中的用户名相同,单是sid字段,数据库中的仍是之前旧系统的sid值,因此咱们就要把它对应成咱们新建的,数据库靠sid来识别用户。网站
这里可使用存储过程sp_change_users_login。它有三种动做,分别是report,update_one和auto_fix。运行下面的代码,系统会列出当前数据库的孤立用户数。sp_change_users_login 'report'咱们只须要选择当前数据库为testdb,而后运行spa
sp_change_users_login 'update_one','test','test'server
系统就会提示修复了一个孤立用户。若是没有创建test的登陆用户,还能够用对象
sp_change_users_login 'Auto_Fix', 'test', NULL, 'testpassword'get
来建立一个登陆用户名为test,密码为testpassword的用户与之对应。一般状况下,数据库对象获得访问问题已经解决了。若是有多个数据库中有同一个用户的数据表,只须要选择不一样的数据库,执行update_one的那个就好了。io