【问题标题】:Backup Permissions备份权限
【发布时间】:2012-05-09 03:34:15
【问题描述】:

我在服务器上创建了一个将访问某些数据库的新用户。

但是当我去备份或恢复数据库时,我得到了错误:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup
无法访问 服务器上指定的路径或文件。验证您是否拥有 必要的安全权限和路径或文件 存在…………

错误显示在我的系统中的任何其他路径。即使是用户和服务帐户拥有完全控制权限的那些。

但是,如果我输入完整路径并单击确定,它会抱怨它无法显示,但它会备份或恢复数据库。只是不显示路径的树视图。

如果我使用sa 帐户进行操作,对话框将显示所有路径而没有任何投诉。

PS:已经将用户添加到db_backoperator 角色。

需要什么权限?

【问题讨论】:

    标签: sql-server sql-server-2008 database-backups


    【解决方案1】:

    db_backupoperator 是数据库角色,而不是服务器角色或 Windows 权限。它仅授予用户对 数据库 的必要访问权限以进行备份。它不授予对服务器文件结构的任何权限,而这些权限是实际制作备份文件所必需的。

    IIRC,要访问文件结构以进行备份,用户必须已经拥有 Windows/域权限才能访问它,或者具有服务器角色 sysadmin 来获取 SQL Server 自己的Windows 访问权限。

    此外,要实际恢复数据库,用户将需要服务器角色 dbcreator

    【讨论】:

    • 我添加了 diskadmin、dbcreator 和 serveradmin,但没有用。使用系统管理员可以正常工作,但我不能让该用户成为系统管理员。
    • 好吧,diskadmin 和 serveradmin 我不确定。看看系统管理员是否有效。
    【解决方案2】:

    您是使用 SQL 身份验证登录还是 Windows 登录进行连接?如果是 SQL 身份验证登录,您如何将该 SQL 登录“完全控制权限”授予 Windows 中的文件夹? Windows 不知道您在 SQL Server 中创建的任何 SQL 身份验证登录。请告诉我们您所说的“我在服务器上创建了一个用户”是什么意思 - 什么用户?什么服务器? SQL Server 还是 Windows?

    作为一种解决方法,您还可以创建一个以sa 或属于 sysadmin 组一部分的 Windows 登录名执行的存储过程,并赋予该权限较低的用户执行的能力。但是,我可以通过添加一个根本没有其他权限的 peon 用户来备份数据库,只需将它们添加到db_backupoperator 角色:

    CREATE LOGIN peon WITH PASSWORD = 'foo', CHECK_POLICY = OFF;
    GO
    CREATE DATABASE splunge;
    GO
    USE splunge;
    GO
    CREATE USER peon FROM LOGIN peon;
    GO
    EXEC sp_addrolemember 'db_backupoperator', 'peon';
    GO
    EXECUTE AS USER = 'peon';
    GO
    BACKUP DATABASE splunge
      TO DISK = 'C:\tmp\splung.bak' -- change this path obviously
      WITH INIT, COMPRESSION;
    GO
    REVERT;
    GO
    

    因此,我将验证 SQL Server 服务帐户是否具有足够的权限来写入相关路径。我知道您说过是这种情况,但正如我所展示的,这似乎不是peon 用户的问题,而是底层引擎写入文件系统的能力。如果您尝试上述备份命令而不将peon 添加到db_backupoperator 角色,则会收到此错误(它不会让您接近实际备份命令或验证磁盘上的任何权限):

    Msg 262, Level 14, State 1, Line 1
    BACKUP DATABASE permission denied in database 'splunge'.
    Msg 3013, Level 16, State 1, Line 1
    BACKUP DATABASE is terminating abnormally.
    

    如果这是 Windows 登录,请验证用户是否确实拥有相关文件夹的写入权限。尝试使用除C:\Program Files\... 下的层次结构以外的其他文件夹,并且不要尝试直接写入根目录(例如C:\file.bak)。

    【讨论】:

    • 好吧。让我解释一下:我创建了一个登录,即SQL Server Auth控件,并授予db_backupoperator等权限。重点是:它可以将备份写入磁盘,但它无法向系统显示文件结构(对话框上的树视图),甚至无法向系统显示用户具有权限的路径(登录的 Windows 用户和服务帐户)。我会尝试你的程序,看看我得到了什么。 ....顺便说一句谢谢...
    • 检查您的用户是否可以执行 xp_fixeddrives、xp_dirtree 和 xp_fileexist - 这是对话框在后台执行的操作。我个人会创建一个存储过程,将数据库作为参数进行备份,并控制输出位置,而不是让用户从对话框中选择目标(或完全使用 UI)。位置对话框缺少一些非常基本的功能(例如创建文件夹),而且多年来一直如此......
    【解决方案3】:

    我的猜测是这是 Windows 身份验证和集成安全性的问题。 SQL Server 有时会模拟用户登录。尝试为您登录时使用的 Windows 用户添加 Windows ACL 权限。

    【讨论】:

    • 当我以 Windows 管理员身份登录但使用“用户”Sql 登录(不是 Sa)时也会发生这种情况。这与集成安全性或角色/权限有关吗?这是我现在的问题,我不知道问题出在哪里=/
    【解决方案4】:

    我正在运行 Windows 10 (x64)、SQL Server Express 2014,尝试将备份还原到 x86 SQL Server 2005 数据库,以便我可以使用这些数据并帮助解决我们应用程序中的错误。在备份和恢复 .bak 文件时,我遇到了具有权限的相同场景。

    同样的事情,我是我的 PC 上的管理员,我假设(我的错误)SQL Server 服务在我的 Windows 帐户下运行(因为我会使用我的 Windows 凭据登录到 SQL 管理)。

    所以我所做的是进入 Windows 中的服务,找到 SQL Server,右键单击属性,停止服务,然后转到登录选项卡并将“登录身份”更改为“本地系统帐户”并检查显示“允许服务与桌面交互”的框。启动服务,我正在路上。

    由于我的环境已关闭 - 仅用于开发 - 这对我来说是一个快速修复。我应该警告你,这不是最终用户的最佳实践!仅供我们开发人员使用。

    【讨论】:

      【解决方案5】:

      在sql server 管理中。我去了数据库属性然后权限并向公众授予备份权限,我假设您也可以授予特定用户。这解决了我的问题。

      【讨论】:

        猜你喜欢
        • 2016-05-09
        • 1970-01-01
        • 2011-03-19
        • 2019-11-13
        • 1970-01-01
        • 1970-01-01
        • 2021-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多