有没有其他方法可以将xp_cmdshell
MSSQLnet 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作为备份路径。