解决SQL SERVER 2000中出现的孤立...

解决SQL SERVER 2000中出现的孤立帐户问题
为什么会出现孤立帐户的问题
在讨论出现孤立帐户之前,首先我们要明确在数据库服务器中的login和DBuser之间的关系。
用户要登录到sql server上,首先必须有一个login,否则用户将不能连接到sql server进行操作。
以下的图片显示了在sql server上增加一个login的步骤。
当然,我们可以看到,在创建login的时候,对用户的身份验证可以有两种方法:
Windows 身份验证
采用windows集成的身份验证,可以提供更多的特性,如安全验证、密码加密、审计、密码失效、最小密码长度和帐号锁定等。同时添加单一登录账户可允许一组用户登录。速度更快,无须重复验证。
Microsoft SQL Server™ 身份验证



SQL SERVER自己维持一套用户身份数据库,这样,将允许非Windows NT 4.0 和 Windows 2000 的客户端连接。
其次,在创建了login后,在具体的数据库中,我们才可以将这个login和数据库的某个用户建立映射关系。形成数据库用户(DBuser),赋予该用户具体的访问数据库的权限。



在现实的情况中,有可能会出现这样的一个情况,当用户将某台数据库服务器上的数据库备份出来,然后还原到另一台服务器上去,那么在原来的服务器上创建的login就失效了,(不论在新的服务器上是否有同名的login,因内部他们的SID是不同的,所以都将不可用)从而失去了和原来的(DBuser)之间的对应关系。这些用户就是所谓的“孤立用户”。
要使得数据库继续可以使用,管理员也许会采用这样的方法:删除所有的孤立用户,然后在新的服务器上新建login和dbuser,再次赋予这些dbuser适当的权限。这样的操作烦琐而容易出错。特别是在重新赋予权限的时候,如果对原来的权限不了解,更容易出错。
下面是解决孤立帐号问题的另一种可行的方案
解决孤立帐号问题
1),恢复一个数据库,产生孤立帐号问题:
假设有一个叫sales的数据库,备份在备份文件中,我们通过restore命令在另一台sql server上恢复:
use master
go
restore database sales from disk='c:\sales.bak'
WITH MOVE 'sales_data' TO 'c:\salesdb.mdf',
MOVE 'sales_log' TO 'c:\saleslog.ldf'
GO



执行后,可见恢复了相应的数据库:同时我们可以观察到该用户对应得login为“无”,产生了孤立用户。



解决孤立用户的思想有两种,其一是假设在新的服务器上没有叫sqltest的login:
2**解决方法一(新建login)
在新服务器中以sysadmin 登陆query analyzer
然后查看该数据库用户的SID值
USE sales
SELECT *
FROM sysusers
WHERE name = ' sqllogin ‘
复制它的sid
然后用 sp_addlogin 为服务器添加一个login。为其指定上面的安全标识符 (SID) 。
sp_addlogin @loginame = ' sqllogin ', @sid = 上面复制的值



3)解决方法二,假设在新的服务器上已经有了一个同名的login,那么需要在原来的login和新的dbuser之间建立关联:
在新服务器上以sysadmin 登陆query analyzer
Use sales
go
sp_change_users_login 'Update_One', ‘sqllogin', ‘sqllogin'
这样就在login和dbuser间建立起了关联。



在上述步骤执行完毕后,我们就可以观察到,dbuser用户sqltest有了对应得login:



到这里,解决了孤立用户的问题。
Tags: 

延伸阅读

最新评论

发表评论