13

我已经在我的 SQL Server 2005 服务器上创建了一个维护计划。备份应写入另一台服务器。我为此使用了 UNC 路径。运行 SQL 代理作业的用户对另一台服务器具有完全访问权限。它在两台服务器上都是管理员。

问题是该语句失败(当然具有正确的服务器名称):

执行 master.dbo.xp_create_subdir N'\\servername\c$\SqlServerBackup\Test'

我得到的错误是:消息 22048,级别 16,状态 1,行 0 xp_create_subdir() 返回错误 123,“文件名、目录名或卷标语法不正确。”

有谁知道可能是什么问题?

4

7 回答 7

23

在我自己遇到这个问题之后,上述解决方案都不够清楚,我想我会发布一个更清晰的回复。该错误实际上与语法无关 - 它完全与权限有关。这里重要的是,尝试登录以创建目录的是 SQL Server 服务帐户,而不是 SQL Server 代理帐户。您可以检查目标服务器上的事件查看器并查看安全日志以查看来自另一台计算机上的 SQL Server 帐户的失败登录(我的以本地管理员身份运行)。

要解决此问题,请将您的 SQL Server 服务帐户设置为允许写入远程共享的域用户。我本来希望 SQL Server 代理能够使用自己的凭据来执行这些备份操作,但显然不是!

于 2009-05-15T16:00:23.577 回答
3

SQL 代理实际上并不运行备份,它能够在执行备份的 SQL Server 中执行命令。因此,SQL Server 服务帐户是需要 UNC 共享权限的帐户。

但是,我认为 xp_create_subdir 过程存在实际问题。我将停止使用维护计划,因为我每隔一段时间就会遇到同样的错误。没有权限发生变化,它“通常”有效,但“通常”并没有削减它。

于 2009-11-17T04:02:03.600 回答
2

我在维护计划历史记录中看到了这个错误。

操作系统错误3(系统找不到指定的路径。)。BACKUP DATABASE 异常终止。”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或连接未正确建立。

我尝试运行第一个备份步骤,它在共享上创建目录。我收到拒绝访问错误。

最后,我授予 SQL 代理运行和维护计划成功运行的服务帐户的完全权限。

于 2011-09-14T03:29:14.110 回答
2

如果您将 SQL Server 和/或 SQL Server 代理服务作为“LocalSystem”运行,但拒绝将 SQL Server 和 SQL Server 代理帐户更改为域帐户,请尝试以下操作:

  1. 如果您使用 SQL Server 代理代理帐户/凭据来执行部分任务并使用 SQL 代理进行备份,则在共享和 NTFS 权限下的 UNC 备份目标上,授予完全/修改权限(分别),因为它们确实在在建立连接的过程中或至少在我尝试过的 SQL 备份作业中(至少根据安全日志)有一点。不幸的是,要么没有办法,要么我还没有找到一种方法来使用代理帐户来执行某些 SQL Server 服务任务,而您可以使用纯 SQL 代理任务来完成(如 User55852 和 ZaDDaZ 之前的帖子中所述)。

  2. 在共享和 NTFS 权限下的 UNC 备份目标服务器上,将完整/修改权限(分别)授予 SQL 服务器(源服务器)的计算机帐户。


这适用于 SQL 服务作为“LocalSystem”运行但需要访问另一台服务器以删除备份的情况。

当然,最佳实践表明,对于每个 SQL 服务,它们应该拥有自己的域帐户,并且具有最低权限,而不是添加服务器的计算机帐户,这会暴露比应允许的更多访问共享 - 基本上任何正在执行的操作作为计算机帐户或“LocalSystem”。

于 2011-02-24T01:01:02.040 回答
1

检查运行 SqlAgent 的帐户。通常它 system\NetworkService 蚂蚁在其他计算机上没有访问权限。

给 UNC 路径上的每个人临时写入权限,或者在控制面板/服务中更改用于 SqlAgent 的帐户。

于 2008-10-19T08:32:26.600 回答
0

是不是服务器名前少了一个双反斜杠?

于 2008-10-19T07:17:35.270 回答
0

我已经多次备份到 UNC 的数据。确保这不是与运行 sql server 和 sql agent 的帐户有关的权限问题。我不会像那样备份到隐藏的管理员共享,也许是导致问题的 $。创建一个共享和备份。\server\share不是\server\c$\folder

于 2008-10-20T02:52:06.337 回答