MSSQLを別のユーザーのUNCにバックアップするためのxp_cmdshell
およびNet Use
の代替手段はありますか?
私は今使っています
EXEC xp_cmdshell 'Net Use \\SERVER\SHARE Password /USER:DOMAIN\USER /PERSISTENT:yes'
実行前スクリプトとして。
ただし、xp_cmdshell
はデフォルトで無効になっています(セキュリティの問題があるためだと思います)。
BACKUP
ステートメントの場合、SQL Serverは、データベースエンジンサービスが実行されているサービスアカウントを、オペレーティングシステムとの対話用のセキュリティコンテキストとして使用します。したがって、SQLServerサービスアカウントに共有へのアクセスを許可する必要があります。 xp_cmdshell
ハック以外にこれを回避する方法はありません。
例えば:
SQLServerサービスがドメインユーザーMYDOMAIN\SQLUser
として実行されている場合は、このユーザーへのアクセスを許可するように共有アクセス許可を変更する必要があります。
SQLServerがNT AUTHORITY\NETWORKSERVICE
として実行されている場合、SQLServerのマシン名がSQLHOST
であるとすると、SQLHOST$
へのアクセスを許可するように共有アクセス許可を変更する必要があります。
そのための他の方法はないと思います。
通常の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
Net Useを使用した後に作成されたシンボリックリンクを使用して、適切な資格情報を入力します。
Net Use \\SERVER\SHARE Password /USER:DOMAIN\USER /PERSISTENT:yes
mklink /d \\SERVER\SHARE C:\Mounts\SHARE
次に、スクリプトで、バックアップパスとしてC:\ Mounts\SHAREを使用します。