您是使用 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
)。