网上搜索几天了,没有对应的解法,问题似乎很简单:通过备份文件在本地恢复了一个数据库(以下称外来数据库),在本机调试程序总出错:
无法打开登录所请求的数据库 "××××"。登录失败。
用户 'sa' 登录失败。
暂时没有在网上找到有效的各种解决方案,神奇的地方是:1、将数据库连接中数据库名更换为本机创建的数据库,可以访问。
  这应该可以说明数据库连接没问题,sa密码没问题,数据库服务器也没问题;2、SQL Server Management Studio/查询分析器均能通过sa正常访问。3、我开始怀疑备份文件是不是IO错误:
  1)于是下载一个更早日期的备份恢复为数据库 B,程序成功访问数据库 B(代码无任何修改);
  2)我以为问题解决,正在抱怨谁提供的备份数据库,害我折腾老半天;
  3)接下来,我又下载一个晚一点日期的备份恢复为数据库 C,仍旧发现“用户'sa'登录失败”;
  4)我决定不求所以然了,切换(仅修改程序连接字符串)回数据库 B 去做我无聊的调试去,天杀的数据库 B 发脾气了:“用户'sa'登录失败”。
  外来的数据库伤不起啊……我开始为刚才草率的抱怨羞愧不已……综上几点,我开始研究这些外来的数据库和我本机原生的数据库有什么异同,发现:1、外来数据库“安全性-用户”里含有更多的用户,先不管什么根据,删掉;
2、其中一个居然删除失败,提示架构中含有主体;
3、仔细对比之下修改架构和本机原生数据库完全相同,成功删除那个用户;
4、发现原生数据库“安全性-用户”里面的“dbo”用户名为:dbo 登录名为:计算机名\Administrator
5、发现外来数据库“安全性-用户”里面的“dbo”用户名为:dbo 登录名为:sa(无法修改)
6、发现数据库服务器“安全性-用户”里面“sa”用户映射里原生数据库没有打勾
7、发现数据库服务器“安全性-用户”里面“sa”用户映射里外来数据库打勾了(无法删除)事实证明,以上研究纯粹是乱投医,数据库B坚定的告诉我:“用户'sa'登录失败”。

解决方案 »

  1.   

    用户认证方式是混合认证。现在:
    其它数据可以通过sa访问
    B数据可以用SQLserver认证方式在查询分析器中使用。至于修改sa账户,启用登录,我不知道在哪操作……
      

  2.   


    进入企业管理器,再找到安全(security),下面的登录(Logins)下面就有sa,在sa上点右键就可以修改了.
    前提你要有权限.也可以用SQL语句进行修改 
      

  3.   

    检查了一下撒登录是“启用”状态。我觉得不应该是数据库服务器上面的问题,否则sa应该也不能登录其它数据库,否则查询分析器也不能通过sa登录
      

  4.   

    楼主确认备份/恢复用的SQL Server版本一致吗?
    依以下语句检查一下Login的SID是否相同.select loginname,sid from master.dbo.syslogins where loginname='sa'
    select name,sid from [外来数据库名].dbo.sysusers where name='dbo'正常结果是
    loginname     sid
    ----------------------
    sa           0x01(1 row(s) affected)name        sid
    -----------------------
    dbo          0x01(1 row(s) affected)