我在服务器上创建了一个将访问某些数据库的新用户。
但是当我去备份或恢复数据库时,我收到错误:
C:\ Program Files \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ Backup
无法访问 服务器上指定的路径或文件。确认你有 必要的安全权限和路径或文件 存在.....................
错误显示系统中的任何其他路径。即使用户和服务帐户具有完全控制权限的那些。
但是,如果我输入完整路径并单击“确定”,则会抱怨它无法显示,但它会备份或还原数据库。只是不显示路径的树视图。
如果我使用sa
帐户执行操作,则对话框会显示所有路径而无需投诉。
PS:已将用户添加到db_backoperator
角色。
需要什么权限?
答案 0 :(得分:17)
db_backupoperator 是数据库角色,而不是服务器角色或Windows权限。它仅授予用户对数据库的必要访问权限以进行备份。它不授予服务器文件结构的任何权限,这是实际制作备份文件所必需的。
此外,要实际还原数据库,用户需要服务器角色 dbcreator 。
答案 1 :(得分:17)
您是使用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
)。
答案 2 :(得分:1)
我的猜测是这是Windows身份验证和集成安全性的问题。 SQL Server有时会模拟用户登录。尝试为您登录的Windows用户添加Windows ACL权限。
答案 3 :(得分:-2)
在sql服务器中管理。我先访问数据库属性,然后再授予权限,并向公众授予备份权限,我假设您也可以授予特定用户。那解决了我的问题。