【问题标题】:Cannot attach database SQL Server 2012 error 5无法附加数据库 SQL Server 2012 错误 5
【发布时间】:2023-04-08 23:40:02
【问题描述】:

当我输入这个时:

CREATE DATABASE AdventureWorks2012
ON (FILENAME = 'C:\Users\sohm\Desktop\Pohm\AdventureWorks2012_Data.mdf')
FOR ATTACH_REBUILD_LOG ;

我明白了:

文件激活失败。物理文件名 “C:\Users\sohm\Desktop\AdventureWorks2012_Data_log.ldf”可能不正确。
Msg 5123, Level 16, State 1, Line 1
CREATE FILE 在尝试创建文件时遇到操作系统错误 5(访问被拒绝。) 打开或创建物理文件“C:\adventuredb\AdventureWorks2012_Data_log.ldf”。
消息 1813,第 16 层,状态 2,第 1 行
无法打开新数据库“AdventureWorks2012”。 CREATE DATABASE 已中止。

我知道这与权限有关。我有管理员帐户。我已经阅读了一百万篇文章,但到目前为止没有任何效果。此外,当我尝试将包含 mdf 文件的文件夹更改为完全控制但它不断恢复为只读时。

【问题讨论】:

  • 确保它没有被附加,SQL server 完全控制 MDF 文件。
  • 我做了,没有附加数据库
  • 确保运行 sql server 服务的帐户可以完全控制该文件夹,因为它需要读取 MDF 并在其中创建一个新的 LDF 文件。忽略文件夹的只读属性,在windows中一般会被忽略,主要用于文件夹自定义。
  • 我使用默认管理员帐户登录 Windows。如何设置对文件夹的完全控制?因为当我右键单击该文件夹并转到安全性时,我拥有完全访问权限。
  • 你可以像上帝一样登录,SQL Server 不是你。

标签: sql sql-server-2012


【解决方案1】:

您应该以管理员身份运行 SSMS。
此外,您可能正在以“sa”用户身份运行查询(sql 服务器身份验证)。
尝试使用 Windows 身份验证运行查询。

【讨论】:

  • 这个简单的解决方案对我有用(以管理员身份运行)但我仍然很好奇当文件夹和文件的权限完全控制每个人时会出现什么问题
【解决方案2】:

短版

为了允许 MS SQL Server 2012 附加数据库文件,您必须授予对 mdf 和 ldf 文件的完全访问权限:

NT 服务\MSSQLSERVER

完全访问

长版

SQL 安全性在 2012 年对文件的处理进行了很多更新。 http://technet.microsoft.com/en-us/library/ms189128.aspx

如果您查看现有的附加数据库并且存在安全性,您可能会发现只有 2 个角色允许具有完全访问权限。 MSSQLSERVERAdministrators,当附加 SQL 从文件中删除所有其他角色。

尝试从 fil 安全权限设置 MSSQLSERVER 将不起作用。

查看您的 services.msc 概述,您将在默认安装中看到 NT Service\MSSQLSERVER 也运行 SQL 服务器服务。

服务帐户不可见,与 IIS AppPools 的问题相同,系统已创建一个子组并“隐藏”自动发现帐户,可能是为了尝试保护帐户,但在我看来只是模糊设置。

问候
一月

【讨论】:

  • 您还可以为每个授予与目录相同权限的文件启用继承。通常这将由管理员组完全控制。
  • 嗨伍迪,你提出的解决方案在 2012 年不起作用。请参阅问题描述的最后一句话。
【解决方案3】:

在管理员模式下打开 SQL Server Management Stdio(右键单击 -> 选择以管理员身份运行。如果询问用户名和密码,请输入您的管理员用户名密码)。然后选择 Windows Authentication 点击​​ ok,现在尝试附加它会附加没有任何错误。

【讨论】:

    【解决方案4】:

    这与您的帐户无关。 SQL Server 正在尝试在运行 SQL Server 的服务帐户的上下文中写入该文件夹。您可以通过转到服务小程序并查看实例运行的身份(可能是 NT AUTHORITY\SYSTEM 或其他)来查看这是谁。您可以覆盖它,或者您可以将 MDF 文件放在 SQL Server 已经具有固有访问权限的数据文件夹中,而不是将它们放在 C:\ 驱动器上的其他位置。

    【讨论】:

      【解决方案5】:

      解决此问题的另一种方法是将所有 SQL Server 服务更改为本地系统帐户而不是服务。开始 -> 运行 ->Services.msc -> 向下滚动到 SQL Server,您应该会看到五个以 SQL Server 开头的服务。右键单击,属性,登录,更改为本地系统帐户。对所有其余的 SQL Server 服务重复此操作并重新启动它们。

      【讨论】:

        【解决方案6】:

        试试这个

        转到您存储mdf 文件的文件夹。

        在 mdf 上选择 file -> Right click -> click 为已登录用户的安全性授予完全权限文件。

        如果问题仍然存在并且可能是由于事务日志损坏,您可以使用工具 SQL Database Recovery Tool Repairs 修复损坏的 mdf 文件。

        【讨论】:

          【解决方案7】:

          想通了。我去了 sql server 配置管理器并右键单击 SQL Server 服务。然后我添加了我的 Windows 管理员帐户来运行该服务,现在它可以工作了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-17
            • 1970-01-01
            相关资源
            最近更新 更多