有没有 xp_cmdshell 和 net use 的替代方法,用于以不同用户身份将 MSSQL 备份到 UNC

有没有 xp_cmdshell 和 net use 的替代方法,用于以不同用户身份将 MSSQL 备份到 UNC

有没有其他方法可以将xp_cmdshellMSSQLnet use备份到具有不同用户的 UNC?

我现在正在使用

EXEC xp_cmdshell 'net use \\SERVER\SHARE  Password /USER:DOMAIN\USER /PERSISTENT:yes'

作为预执行脚本。

xp_cmdshell默认情况下是禁用的(我猜是由于安全问题)。

答案1

对于BACKUP语句,SQL Server 将使用数据库引擎服务所运行的服务帐户作为与操作系统交互的安全上下文。因此,您需要授予 SQL Server 服务帐户对共享的访问权限。除了您的xp_cmdshell黑客攻击之外,没有其他办法可以解决这个问题。

例如:

如果 SQL Server 服务以域用户身份运行MYDOMAIN\SQLUser,则需要修改共享权限以允许该用户访问。

如果 SQL Server 正在运行NT AUTHORITY\NETWORKSERVICE,假设您的 SQL Server 计算机名称是SQLHOST,您需要修改共享权限以允许访问SQLHOST$

答案2

我认为没有其他方法可以实现这一点。

普通的 TSQL 备份脚本只允许备份到本地磁盘。

如果您有足够的空间,您可以创建一个 SQL 任务,在本地磁盘上进行备份,然后通过 powershell 将其移动到 UNC 路径。

如果没有足够的空间:您可以使用以下命令再次激活 xp_cmdshell...

    -- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1;
GO
-- To update the currently configured value for advanced options.
RECONFIGURE;
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1;
GO
-- To update the currently configured value for this feature.
RECONFIGURE;
GO

看: http://msdn.microsoft.com/en-US/en-en/library/ms190693.aspx

答案3

使用通过 net use 输入适当的凭据后创建的符号链接。

net use \\SERVER\SHARE  Password /USER:DOMAIN\USER /PERSISTENT:yes
mklink /d \\SERVER\SHARE C:\Mounts\SHARE

然后在脚本中,使用C:\Mounts\SHARE作为备份路径。

相关内容