20

我在程序使用的本地文件中有一个数据库。该程序功能有限,我需要运行一些快速查询。我安装了 SQL Server Management Studio Express 2005 (SSMSE),连接到 SQL Server 实例,附加数据库文件并运行查询。现在原程序将不再连接到数据库。我收到错误:

无法打开用户默认数据库。登录失败。用户“MyComputer\MyUserName”登录失败。

我已经回到 SSMSE 并尝试设置默认数据库。我已经打开了Security、Logins、BUILTIN\AdministratorsBUILTIN\Users。在General下,我已将默认数据库设置为程序的数据库。在User Mappings下,我确保勾选了数据库并且勾选了db_datareaderdb_datawriter

该程序使用连接字符串:

服务器=(本地)\实例;AttachDbFilename=C:\PathToDatabase\Database.mdf; 综合安全=真;用户实例=真;

我对数据库管理了如指掌。我还缺少什么?

4

8 回答 8

21

这可能不是专门回答您的问题,但它可能会帮助其他人因不同问题而引起类似问题

在我的情况下,问题是我的用户被默认为由于任何原因无法访问的数据库(可以重命名、删除、损坏或......)要解决问题,只需按照以下说明进行操作

  1. 尝试在登录页面上再次登录,还有其他选项卡选择“连接属性”。

  2. 在选项卡下找到“连接到数据库”并选择您有权访问的现有数据库,例如 tempdb 或 master

  3. 连接到 SQL Server 实例后,执行以下 TSQL 为登录分配一个新的默认数据库。

    Use master
    GO
    
    ALTER LOGIN [yourloginname] WITH DEFAULT_DATABASE = TempDB
    GO
    

或者,一旦您连接,通过 UI 将默认数据库名称更改为 master

文章取自: http ://www.mytechmantra.com/LearnSQLServer/Fix-cannot-open-user-default-database-Login-failed-Login-failed-for-user-SQL-Server-Error/

于 2016-04-18T23:56:38.900 回答
8

首先,尝试隔离您的问题:

  1. 备份文件!显然,在某些情况下,以下某些步骤可能会导致文件消失。
  2. 您确定要通过 Management Studio 连接到与程序相同的实例吗?
  3. 如果可能,请尝试关闭您不希望使用的实例。
  4. 将用户的默认数据库设置为 master 并尝试使程序登录。
  5. 尝试通过 Management Studio 以用户身份登录 - 由于您已集成安全性,因此您应该以程序用户身份打开 Management Studio。
  6. 您是否在使用“用户实例” - 也许不知道?如果是这样,这可能会有所帮助:http: //blogs.msdn.com/b/sqlexpress/archive/2006/11/22/connecting-to-sql-express-user-instances-in-management-studio.aspx

我没有对以您的程序方式附加的文件进行太多工作 - 但您写道,您也在 Management Studio 中附加了数据库。在运行程序之前,您是否尝试过将其分离?也许您看到 Management Studio 和您的程序竞争对 MDF 文件的独占访问权?

编辑:我在上面添加了第 6 点 - 这是在对此类登录失败进行故障排除时,我自己的 TODO 列表中的新内容。但这听起来确实很像你正在经历的。

EDIT2:在第一次编辑中,新项目被添加到列表中。所以评论中的数字与答案中的数字不对应。

于 2011-12-20T23:20:37.183 回答
6

当我将默认数据库脱机时,这个问题就出现了。接下来我知道我无法登录。切换到“连接属性”选项卡并选择下拉列表以更改我要连接的数据库也失败了。

一旦我手动输入 master 作为我想要连接的数据库(在“连接属性”选项卡上),它就会立即让我进入。

于 2017-07-06T18:07:07.527 回答
4

我终于明白了这一点,我的情况与我今晚读到的所有情况都不同。

我已经从备份中恢复了我的数据库。我知道我一直在使用一个特定的登录用户,所以我在 SSMS 中创建了该用户。但是,备份中的数据库下已经有一个同名的用户。

由于我已经搞砸了很多试图解决这个问题,我无法轻松删除数据库下的用户。我删除了数据库并再次恢复。然后:

  1. 删除Databases->[my database]->Users下的用户
  2. 在 Security->Logins 中再次创建用户(不在您的数据库下,尽管这可能也有效。
  3. 转到新创建的用户。选择属性。然后在用户映射下,告诉它使您的数据库成为默认值。给它读写权限。

摘要:我有两个用户。一个是数据库附带的,一个是我创建的。删除数据库附带的那个并创建自己的。

于 2015-02-20T04:32:40.967 回答
3

首先单击“连接到服务器”提示的选项>>按钮。

现在将连接到数据库更改为服务器上的任何现有数据库,例如 master 或 msdb。

更多细节

https://blog.sqlauthority.com/2008/11/04/sql-server-fix-error-4064-cannot-open-user-default-database-login-failed-login-failed-for-user/

于 2018-04-30T12:03:56.977 回答
1

我也遇到过同样的问题,原来我试图访问内置的成员资格类(在视图中),而.Net 试图在 App_Data 文件夹中创建数据库:

@Membership.GetUser().ProviderUserKey

这将触发系统尝试创建基于内置会员系统的数据库,这可能不是您系统的设置方式。

于 2015-06-11T17:09:21.830 回答
1

就我而言,我必须设置“连接到任何数据库”正确的路径:

在您的实例上,转到Security,然后转到Logins

右键单击那里,你会看到properties,你应该点击Securables

在那里它可以连接到任何数据库。

于 2017-03-07T14:04:00.750 回答
1

我有一个类似的问题,必须简单地下载能够启动用户实例的 SQL Express 实用程序。SSEUtil 是由 Visual Studio 团队编写的用于帮助解决用户实例问题的工具,您可以在随实用程序一起安装的自述文件中阅读有关它的更多信息。 http://www.microsoft.com/downloads/details.aspx?FamilyID=fa87e828-173f-472e-a85c-27ed01cf6b02&DisplayLang=en

希望这会有所帮助。

于 2016-03-30T12:29:19.343 回答