Sql server SQL Server:登录成功,但“成功”;数据库[dbName]不可访问。(ObjectExplorer)“;

Sql server SQL Server:登录成功,但“成功”;数据库[dbName]不可访问。(ObjectExplorer)“;,sql-server,login,Sql Server,Login,我正在使用windows 8.1和SQL Server 2012 我使用操作系统帐户“Manoj”通过windows身份验证访问SQL SERVER。 最近我删除了我的操作系统用户帐户“Manoj”,并创建了一个同名的新帐户“Manoj” 但该系统将新账户视为“Manoj_2”。这一变化使我无法访问我创建的旧数据库 上面说 数据库[dbName]不可访问。(ObjectExplorer) 每当我尝试访问我之前创建的任何数据库时 我曾经在SQL Server中为“Manoj_2”创建新的登录名,默

我正在使用windows 8.1和SQL Server 2012

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

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

上面说

数据库[dbName]不可访问。(ObjectExplorer)

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

我曾经在SQL Server中为“Manoj_2”创建新的登录名,默认数据库为“master”。但问题依然存在

我无法分离DBs。我无法扩展DBs

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


请任何人告诉我,该怎么办?无论是使用OS还是SQL Server

,当用户的默认数据库设置为他们没有权限的数据库或其脱机时,都会导致此问题


请尝试重新添加用户。请看一看。

在这种情况下,您必须连接到中的数据库

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

在这里你可以找到做这个的方法

简而言之,在使用windows身份验证启动Sql Server Management Studio之后,必须使用参数-m启动Sql Server实例


现在您是一个系统管理员,将系统管理员角色分配给您的用户,退出并删除-m参数,然后重新启动sql server。

这是一个非常愚蠢的解决方案,但我会在这里添加它,以防有人通过谷歌搜索找到它


我刚刚重新启动了SQL服务,出现了这个错误,就我而言,只要等10分钟就足够了,一切又恢复正常了。这似乎是刚启动时出现的错误

这就是导致我出现这个问题的原因,以及我是如何解决它的:

将我的数据库从.bak文件还原到另一个SQL server实例,该文件包含一个先前存在的用户

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

收到错误

删除了作为数据库所有者的用户,然后使用完全相同的凭据、映射、登录等进行读取


还原后读取用户后,能够以用户身份登录。

请尝试此脚本。。这个脚本的作用是查看数据库的活动会话并终止它们,这样您就可以使数据库重新联机

 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

在我的例子中,我只需要用“以管理员身份运行”启动应用程序就可以访问任何内容。否则,我将得到您提到的错误。

在以下步骤中获得此错误:

  • 运行“脱机”
  • “脱机”运行时间太长,因此我关闭了此窗口
  • 然后我犯了这个错误
  • 修复的步骤:

  • 转到“活动监视器”并删除与此数据库的所有连接。然后DB真的离线了,一切正常

  • 我有两个用户:一个有系统管理员角色,另一个(有问题的一个)没有

    因此,我与另一个用户一起登录(您可以创建一个新用户),并从以下位置选中了复选框“sysadmin”:安全-->登录-->右键单击您的SQL用户名-->属性-->服务器角色-->确保“sysadmin”复选框带有复选标记。 按“确定”并尝试与新选中的用户连接。

    这为我修复了它:

    Use [dbName]
    GO
    
    EXEC sp_change_users_login 'Auto_Fix','Manoj', null, 'Manojspassword'
    GO
    

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

    解决方案:取消附加数据库>删除选项 使用mssql数据文件夹下的mdf文件再次连接数据库

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

    在左侧导航栏中,转到>>用户映射>>检查数据库,并在“数据库角色成员资格”中检查“db_所有者”中的用户是否遇到问题


    问题已解决…

    我执行了以下步骤,效果良好:


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

    如果您使用的是SQL Management Studio,只需以管理员身份启动它即可


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

    在我的情况下,重新启动SQL Server服务就足以解决此问题。

    问题在于数据库中的用户是“孤立用户”。这意味着没有与用户关联的登录id或密码。即使存在与用户匹配的登录id,这也是正确的,因为有一个GUID(在Microsoft speak中称为SID)也必须匹配

    这曾经是一个很难解决的问题,但目前(SQLServer2000,SP3)有一个存储过程来完成这项繁重的工作

    所有这些说明都应该以数据库管理员的身份完成,并选择还原的数据库

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

    EXEC sp_change_users_login 'Report'
    
    如果您已经拥有此用户的登录id和密码,请执行以下操作进行修复:

    EXEC sp_change_users_login 'Auto_Fix', 'user'
    
    EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'
    
    如果要为此用户创建新的登录id和密码,请执行以下操作进行修复:

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

    此文本是在2017年12月13日的Dez中获得的。

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

    在我的情况下,当我使用管理员凭据打开SQL server Management Studio,右键单击数据库并选择“联机时,此文本有效。”或者类似的问题。

    在登录到SSMS的机器和单独用户上,通过Python脚本运行一些批量插入作业后,我遇到了类似的问题

    如果Python内核(或者任何其他连接)是int