SQL Server:无法打开登录请求的数据库

时间:2012-07-24 00:43:06

标签: sql-server sql-server-2008 authentication

在调试在IIS Express下运行的ASP.Net MVC应用程序时,尝试使用成员资格提供程序时出现以下错误:

  

无法打开登录请求的数据库“MyDB”。登录失败。

     

用户'MY-PC \ MyName'登录失败。

我尝试使用

中列出的步骤进行问题排查

https://stackoverflow.com/a/2577854/141172

SELECT SUSER_ID('MY-PC\MyName')

返回一个ID。

SELECT USER_ID('MY-PC\MyName')

返回NULL

CREATE USER [MY-PC\MyName] FROM LOGIN [MY-PC\MyName]

返回错误消息

  

登录已拥有不同用户名下的帐户。

实际上,有一个登录帐户,在我创建数据库时自动创建,名为

  

DBO

映射到MY-PC\MyName

我的连接字符串是

Data Source=.\SQLEXPRESS;Initial Catalog=MyDB;Persist Security Info=True;Integrated Security=SSPI;

在生产环境中运行我会知道如何创建适当的用户和登录。我坚持如何解决IIS Express使用我的Windows帐户名来尝试登录MyDB时该Windows帐户已与dbo关联的事实。

1 个答案:

答案 0 :(得分:13)

结果是连接字符串的初始目录部分中的拼写错误。

查看事件日志,我看到了一个错误,如

  

用户'MY-PC \ MyName'登录失败。原因:无法打开显式指定的数据库。 [客户:]

然后查看同一事件的详情标签,我看到二进制数据 In Bytes 包含的信息

0000: 18 48 00 00 0E 00 00 00   .H......
0008: 17 00 00 00 45 00 52 00   ....E.R.
0010: 49 00 43 00 2D 00 4F 00   I.C.-.O.
0018: 52 00 49 00 47 00 49 00   R.I.G.I.
0020: 4E 00 5C 00 53 00 51 00   N.\.S.Q.
0028: 4C 00 45 00 58 00 50 00   L.E.X.P.
0030: 52 00 45 00 53 00 53 00   R.E.S.S.
0038: 00 00 07 00 00 00 6D 00   ......m.
0040: 61 00 73 00 74 00 65 00   a.s.t.e.
0048: 72 00 00 00               r...

注意最后一部分是UTF-16编码单词“master”。这使我在轨道上建立了与目录的连接,而不是所请求的目录,这反过来又导致注意到连接字符串中目录名称中的拼写错误。

如果微软只显示“没有这样的目录:MyCatalog”这样的错误,情况会好得多。