25

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

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

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

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

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

如果我使用该sa帐户进行操作,则对话框会显示所有路径而不会抱怨。

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

需要什么权限?

4

5 回答 5

18

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

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

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

于 2012-04-28T19:58:50.120 回答
17

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

作为一种解决方法,您还可以创建一个作为 sysadmin 组的一部分执行的存储过程sa或一个 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)。

于 2012-04-28T21:16:37.840 回答
1

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

于 2012-04-28T19:53:16.767 回答
1

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

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

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

由于我的环境是封闭的——仅用于开发——这对我来说是一个快速的解决方法。我应该警告你,这不是最终用户的最佳实践!只为我们开发者。

于 2015-09-09T16:15:45.870 回答
-2

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

于 2018-10-20T12:22:52.400 回答