SQL Server数据库帐号孤立解决办法

2008年12月25日   数据库   0条评论   3420人围观过  
如果SQL Server数据库从一台计算机备份后恢复到另一台计算机上,就会出现帐号孤立问题,我是难以搞定,请教了BigHead,从他的博客上学来了:

SQL Server的数据库帐号经常会在还原后出现无法连接的情况,很是让人郁闷…
以下提供两种解决办法,分友好型和禽兽型.

1.友好型

解决数据库孤立帐号的方法,百事不爽。欢迎尝试。
@sid是数据库帐号的剩下的两个分别的数据库名称和帐号名称。

[code language="sql"]
Exec sp_configure 'allow updates',1 —允许更新系统表。
RECONFIGURE WITH OVERRIDE

Use Master
Select sid From syslogins Where Name = @UserName –这里查询现在新建帐号的SID
Use @DBName –使用数据库的名称
Update sysusers Set sid = @sid Where name = @UserName –@sid为上面查询到的值,更新当前库的sysusers中帐号的SID使其同步。问题解决。

Exec sp_configure 'allow updates',0 –关闭系统表更新
RECONFIGURE WITH OVERRIDE
[/code]

PS:之所以说是友好型就是因为他并不变更数据库的连接帐号名称,甚至可以保持密码也不变化。因为这个方法主要是通过同步SQL Server数据库中的SID来解决掉SQL Server帐号孤立的问题.

2.禽兽型
在数据库备份更换系统后经常出现帐号无法正常访问表的情况,下面是个解决的大概例子

先运行以下语句,把当前库内的表的所有者都改为DBO当然你也可以改为别的只要修改UID的值即可

[code language="sql"]
sp_configure 'allow updates','1'
go
reconfigure with override
go
update sysobjects set uid=1 where uid<>1 –更新数据库中表的所有者,强制为DBO或者您已知UID的SQL Server帐号。
go
sp_configure 'allow updates','0'
go
reconfigure with override
[/code]

然后再到库内用户选项里把孤立帐户删除即可…

注:UID的查询可以使用下面的语句

[code language="sql"]
USE master
SELECT *
FROM sysusers
WHERE uid >= '1'
[/code]

PS:禽兽型的方法兼容行相对高些,对于数字为开头的数据库有较好的支持。

哈哈其实个人比较推荐第1种方法,数据库修复后所做的修改工作较少。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。