SQL Server:登录成功但是"无法访问数据库[dbName]。 (ObjectExplorer)"

时间:2014-10-05 07:50:36

标签: sql-server login

我正在使用Windows 8.1和SQL Server 2012.

我使用操作系统帐户“Manoj”通过Windows身份验证访问SQL SERVER。 最近我删除了操作系统的用户帐户“Manoj”,并创建了一个名为“Manoj”的新帐户。

但该系统将新帐户视为“Manoj_2”。这个改变使我无法访问我创建的旧数据库。

它说

  

无法访问数据库[dbName]。 (ObjectExplorer)

每当我尝试访问我创建的任何先前的数据库时。

我曾经在SQL Server中为“Manoj_2”创建新登录,默认DB为“master”。但问题仍然存在。

我无法分离数据库。我无法扩展数据库。

注意:在操作系统中,我拥有“Manoj”帐户的管理员权限。

请有人告诉我,该怎么办?使用OS或SQL Server

21 个答案:

答案 0 :(得分:29)

对于这种情况,您必须连接到Single-User mode中的数据库。

以单用户模式启动SQL Server使计算机的本地Administrators组的任何成员都能够作为sysadmin固定服务器角色的成员连接到SQL Server实例。

您可以在此处找到step-by-step instruction来执行此操作。

简而言之,在启动带有Windows身份验证的Sql Server Management Studio之后,必须使用参数 -m 启动sqlserver实例。

现在您是 sysadmin ,将 sysadmin角色分配给您的用户,退出并删除 -m 参数并重新启动sql server。

答案 1 :(得分:6)

真的很愚蠢的解决方案,但我会在这里添加它,万一有人从谷歌搜索到这里。

我刚刚重新启动了SQL服务,并且遇到了这个错误,在我的情况下,等待10分钟就足够了,再次没问题了。似乎这是刚刚启动时出现的错误。

答案 2 :(得分:6)

问题是数据库中的用户是"孤儿"。这意味着没有与用户关联的登录ID或密码。即使存在与用户匹配的登录ID,也是如此,因为还有一个必须匹配的GUID(在Microsoft中称为SID)。

这曾经很难修复,但是目前(SQL Server 2000,SP3)有一个存储过程可以解决这个问题。

所有这些说明都应该作为数据库管理员完成,并选择已恢复的数据库。

首先,确保这是问题所在。这将列出孤立用户:

EXEC sp_change_users_login 'Auto_Fix', 'user'

如果您已拥有此用户的登录ID和密码,请执行以下操作进行修复:

EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'

如果要为此用户创建新的登录ID和密码,请执行以下操作进行修复:

char buf[] = ...

此文本是在Dez-13-2017的http://www.fileformat.info/tip/microsoft/sql_orphan_user.htm获得的

答案 3 :(得分:2)

这是导致我解决这个问题的原因以及我如何修复它:

将我的数据库从.bak文件恢复到另一个SQL服务器实例,该文件包含一个预先存在的用户。

试图像往常一样使用相同的连接字符串但更新的服务器实例从我的应用程序访问已恢复的数据库。

收到错误。

将用户删除为DBowner,然后使用完全相同的凭据,映射,登录等进行读取。

在恢复后读取用户后能够以用户身份登录。

答案 4 :(得分:2)

This is caused when the user's default database is set to a database they don't have permissions or its offline

尝试重新添加user.Pleae也看看here

答案 5 :(得分:1)

转到

安全>>登录>> 右键单击用户>>属性>>

在左侧导航栏中移至>>用户映射>>检查数据库和"数据库角色成员身份:<>"检查" db_owner"对于您遇到问题的用户。

问题已解决......

答案 6 :(得分:1)

这为我解决了这个问题:

Use [dbName]
GO

EXEC sp_change_users_login 'Auto_Fix','Manoj', null, 'Manojspassword'
GO

答案 7 :(得分:0)

我有两个用户:一个具有sysadmin角色,另一个(有问题的用户)没有。

所以我与其他用户登录(你可以创建一个新用户)并检查ckeck框'sysadmin':Security - >登录 - >右键单击SQL用户名 - >属性 - >服务器角色 - >确保'sysadmin'复选框有复选标记。 按确定并尝试连接新检查的用户。

答案 8 :(得分:0)

问题:无法访问数据库[dbName]。 (ObjectExplorer)在扩展数据库时出错。

解决方案:Deattach数据库>删除选项 使用mss文件夹下的mdf文件再次附加数据库

答案 9 :(得分:0)

就我而言,我只需使用“以管理员身份运行”启动应用程序即可访问任何内容。否则我会收到你提到的错误。

答案 10 :(得分:0)

如果您使用的是Sql Management Studio,请以管理员身份启动它。

右键单击 - >以管理员身份运行

答案 11 :(得分:0)

就我而言,重新启动SQL Server服务足以解决问题。

答案 12 :(得分:0)

请尝试此脚本..此脚本的作用是查看数据库的活动会话并将其杀死,以便您可以将数据库重新联机。

 CREATE TABLE #temp_sp_who2
        (
          SPID INT,
          Status VARCHAR(1000) NULL,
          Login SYSNAME NULL,
          HostName SYSNAME NULL,
          BlkBy SYSNAME NULL,
          DBName SYSNAME NULL,
          Command VARCHAR(1000) NULL,
          CPUTime INT NULL,
          DiskIO INT NULL,
          LastBatch VARCHAR(1000) NULL,
          ProgramName VARCHAR(1000) NULL,
          SPID2 INT
          , rEQUESTID INT NULL --comment out for SQL 2000 databases

        )


    INSERT  INTO #temp_sp_who2
    EXEC sp_who2


    declare @kill nvarchar(max)= ''
    SELECT  @kill = @kill+ 'kill '+convert(varchar,spid) +';'
    FROM    #temp_sp_who2
    WHERE   DBName = 'databasename'

    exec sp_executesql @kill


  ALTER DATABASE DATABASENAME SET ONLINE WITH IMMEDIATE ROLLBACK

答案 13 :(得分:0)

我的问题通过重新启动MS SQL服务器服务得到解决,简单。

答案 14 :(得分:0)

在我的情况下,当我使用管理员凭据打开SQL Server Management Studio并且右键单击数据库并选择“上线”或类似的内容时,它工作正常。

答案 15 :(得分:0)

在我从另一台计算机和另一名用户登录到SSMS之后,通过Python脚本运行了一些大容量插入作业之后,我遇到了类似的问题。

看来,如果Python内核(或可能的任何其他连接)在批量插入作业的中间中断而没有适当地“清理”混乱,则可能与用户凭证和锁定有关的某种挂起行为SQL Server端。重新启动服务或整个计算机都无法为我工作。

在我的情况下,解决方案是使数据库脱机和联机。 在SQL Server Management Studio中,右键单击“数据库”>“任务”>“脱机”,然后右键单击“数据库”>“任务”>“联机”。

答案 16 :(得分:0)

我遇到了类似的问题,对我来说,我必须使用所需的名称创建一个新用户,在您的情况下,您应该创建类似以下的内容:

USE [master]

GO

/****** Object:  Login [Manoj_2]    Script Date: 9/5/2019 12:16:14 PM ******/
CREATE LOGIN [Manoj_2] FROM WINDOWS WITH DEFAULT_DATABASE=[master],
DEFAULT_LANGUAGE=[us_english]

GO

ALTER SERVER ROLE [sysadmin] ADD MEMBER [Manoj_2]
GO

答案 17 :(得分:0)

执行以下语句:

EXEC rdsadmin.dbo.rds_set_database_online dbname

答案 18 :(得分:-1)

在此步骤中获取此错误:

  1. 运行"离线"。
  2. "离线"运行时间太长,所以我关闭了这个窗口。
  3. 然后我收到了这个错误。
  4. 修复步骤:

    1. 转到"活动监视器"并删除此数据库的所有连接。然后DB变得非常离线,一切都很好。

答案 19 :(得分:-1)

我执行了以下步骤,它对我有用:

1)连接到SQL Server-> Security->登录 - >搜索特定用户 - >属性 - >服务器角色 - >启用"系统管理员"复选框

答案 20 :(得分:-1)

我刚刚重新启动了SQL Server(MSSQLSERVER),并且我的SQL Server代理(MSSQLSERVER)也重新启动了。现在,可以用我的登录名通过SSMS访问SQL SERVER 2008 R2数据库实例。