【发布时间】:2016-11-28 06:51:43
【问题描述】:
我在一个工作组中有两台 Windows Server 2012 R2 服务器,第一台我有 MS SQL Server,另一台(除其他外)用作备份存储。在数据库服务器上,SQL Server 数据库引擎和 SQL Server 代理都使用默认虚拟帐户运行 - NT Service\MSSQLSERVER 和 NT Service\SQLSERVERAGENT。
现在,我想使用 Ola Hallengren 维护作业来备份我的 MS SQL Server 数据库。这些脚本被包装到 SQL Server 代理作业中,但备份是一个 t-sql 过程,因此由 SQL Server 数据库引擎使用 NT Service\MSSQLSERVER 执行。
我在存储服务器上创建了一个帐户,并为此帐户创建了一个具有访问权限的共享文件夹。我可以使用为创建的帐户提供凭据的 net use 命令连接数据库服务器上的共享。 有一个问题:共享是为运行 net use 命令的帐户连接的。
如果我将共享与本地系统帐户(应该适用于所有用户)连接,那么 NT Service\MSSQLSERVER 仍然无法访问它,任何其他帐户都不能。似乎hack previously proposed on stackoverflow 在 Windows Server 2012 R2 中已修复。
如果我在 SQL Server 代理作业中将 net use 命令作为一个步骤运行,那么它会使用另一个虚拟帐户 - NT Service\SQLSERVERAGENT - 并且备份步骤失败并出现“找不到文件夹”错误。
所以我想知道一种使用all the necessary permissions 创建 Windows 服务帐户的方法,以便在工作组环境中使用 SQL Server 数据库引擎服务。或者解释为什么它不能完成。 理想情况下,它应该是一个脚本 - Powershell 或 VBScript。
我尝试将 SQL Server Dabase Engine 和 SQL Server Agent 作为本地系统运行,并且备份的效果非常好。但我不认为这是一种解决方案,因为从安全角度来看不建议这样做。
由于同样的安全原因,我也不会考虑使用xp_cmdshell 运行 net use 命令的解决方案。
【问题讨论】:
-
您如何访问共享,您使用的路径是什么?您映射了驱动器还是使用了 UNC 路径?
-
@DavidG,我使用 UNC 路径,像这样:
net use \\remotehost\folder password /user:remotehost\username -
问题是这仅对当前登录的用户有效,您需要以运行 SQL 的同一用户身份登录。
-
是的,这就是目标。我需要一个脚本来在工作组中创建这样的帐户,以便该帐户能够运行 MS SQL Server 并连接网络共享文件夹。或者某种手册,如果不是脚本的话。
标签: sql-server windows networking windows-services