此问题出现在数据库的移值上。移值后,数据库的登陆名和数据库用户名孤立,原数据中,用建立的用户名密码登陆可以访问数据库,但是移值后就不能访问了。而且如果您尝试向该登录帐户授予数据库访问权限,则会因该用户已经存在而出现以下错误信息: ‘该登录已经在另一个用户名下拥有帐户’。
产生错误的原因是:
在您向目标服务器传输登录帐户和密码后,您的用户可能还无法访问数据库。登录帐户与用户是靠安全识别符 (SID) 关联在一起的;在您移动数据库后,如果 SID 不一致,SQL Server 可能会拒绝用户访问数据库。此问题称为孤立用户。如果您使用 SQL Server 2000 DTS 传输登录功能来传输登录帐户和密码,就可能会产生孤立用户。此外,被允许访问与源服务器处于不同域中的目标服务器的集成登录帐户,也会导致出现孤立用户。
以下是解决办法:
1.查找孤立用户。在目标服务器上打开查询分析器,然后在您移动的用户数据库中运行以下代码: exec sp_change_users_login 'Report' , 查找到后执行
Use
lk96160
go
sp_change_users_login
'
update_one
'
,
'
lk96160
'
,
'
lk96160
'
一般问题就会解决。
2.如果一个用户是孤立用户,数据库用户可以成功登录到服务器,但却无权访问数据库。如果您尝试向该登录帐户授予数据库访问权限,则会因该用户已经存在而出现以下错误信息:
Microsoft SQL
-
DMO (ODBC SQLState:
42000
) Error
15023
:
User
or
role
'
%s
'
already
exists
in
the
current
database
.
或是登陆名对应该的用户改成了dbo,则在sa下执行一下以下代码:
exec
sp_changedbowner
'
sa
'
然后再执行:
Use
lk96160
go
sp_change_users_login
'
update_one
'
,
'
lk96160
'
,
'
lk96160
'
一般问题就会解决了。