8

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

Cannot open user default database. Login failed. Login failed for user 'MyComputer\MyUserName'.

我已经回到SSMSE并尝试设置默认数据库。我已经打开了安全,登录,BUILTIN \ AdministratorsBUILTIN \ Users。在通用,我已经将默认数据库设置为该程序的数据库。在用户映射,我确定数据库被选中,并且的db_datareaderdb_datawriter权限被选中。

程序使用的连接字符串:

Server=(local)\Instance; AttachDbFilename=C:\PathToDatabase\Database.mdf; Integrated Security=True; User Instance=True;

我知道杰克 - 所有关于数据库管理。我还有什么遗漏?

回答

6

首先,尝试找出你的问题:

  1. 取文件的备份!显然,在某些情况下,以下某些步骤可能导致文件消失。
  2. 您确定您通过Management Studio连接到同一个实例吗?
  3. 如果可能,请尝试关闭您不期望使用的实例。
  4. 将用户的默认数据库设置为主,并尝试使程序登录。
  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列表中的新问题,当解决这种类型的登录失败。但它听起来很像你正在经历的。

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

+0

所有用户现在都将默认数据库设置为“主”。使用SSMSE,我使用集成安全性将问题连接到“(本地)\ Instance”,与程序完全相同。该程序仍然给出相同的错误信息。我甚至专门为我创建了一个登录名,但仍然没有爱。 – 2011-12-21 00:28:38

2

我终于明白了这一点,而且我的情况与我今晚读到的其他人不同。

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

因为我试图解决这个问题,所以我无法轻易删除DB下的用户。我删除了数据库并重新恢复。然后:

  1. 删除用户数据库下 - > [我的数据库] - >用户
  2. 在安全性 - >登录(不是在你的DB再次创建用户,尽管这可能工作太
  3. 。进入新创建的用户选择属性,然后在用户映射,告诉它让你的数据库的默认给它的读写访问

摘要:。。我有两个用户之一,与DB来了。 ,以及我创建的一个。删除DB附带的并创建自己的。

0

我也有这个相同的问题,事实证明,我试图访问内置的成员类(在视图中),并且.net试图在App_Data文件夹中创建数据库:

@Membership.GetUser().ProviderUserKey 

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

4

这可能没有具体回答你的问题,但它会帮助其他有类似问题的

的问题是你的用户默认为这是不以任何理由accessable(可以重命名,删除,破坏或数据库...) 为了解决这个问题,只要按照下列指示

  1. 尝试登录页面上再次登录有其他选项卡中选择 “连接属性”。
  2. 标签下找到“连接到数据库”,然后选择您访问喜欢的tempdb或掌握
  3. 一旦您连接到SQL Server实例的现有数据库中执行下面的TSQL分配登录一个新的默认数据库。

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

另外,一旦你连接通过UI

更改默认的数据库名称掌握

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

0

在我来说,我必须设置“连接到任何数据库”右侧路径:

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

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

它有可能给连接到任何数据库。

0

这个问题表现对我来说,当我把我的默认数据库脱机。接下来我知道我无法登录。切换到Connection Properties选项卡并选择下拉列表来更改我想要连接的数据库也失败。

这让我马上有一次我手动式主为DB我想连接到(连接属性选项卡上)。

相关问题