首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

使用 SQL Server 擴展預存程序 xp_cmdshell 實現遠端備份與還原:網路共享與 net use 實戰

     編輯:關於SqlServer

需求場景

C/S 架構應用,用戶端 (Client) 操作備份/還原,備份檔需儲存於用戶端本機磁碟。資料庫伺服器 (mainserver) 必須能寫入/讀取用戶端 (david) 共享資料夾。

環境資訊

  • SQL Server 實例:mainserver
  • 目標資料庫:msdb
  • 用戶端電腦名:david
  • 用戶端帳號/密碼:zf / 123,網域:domain
  • 用戶端共享資料夾:E:\test → 共享名 test

四步驟實作

1. 建立共享資料夾 (用戶端執行)

net share test=E:\test

2. 建立信任連線:SQL Server 連接用戶端共享

-- 在 SQL Server 執行 (需啟用 xp_cmdshell)
EXEC master..xp_cmdshell 'net use \\david\test 123 /user:domain\zf';
  • xp_cmdshell:擴展預存程序,以命令列方式執行 OS 指令並回傳文字結果。
  • net use:建立/斷開網路共享連線,控制持久連線。

3. 備份資料庫至遠端共享

BACKUP DATABASE msdb 
TO DISK = '\\david\test\msdb.bak';

4. 移除共享 (用戶端執行)

net share test /delete

執行結果範例

已處理 1376 頁,屬於資料庫 'msdb' 的檔案 'MSDBData' (檔案 1)。
已處理 1 頁,屬於資料庫 'msdb' 的檔案 'MSDBLog' (檔案 1)。
BACKUP DATABASE 成功處理 1377 頁,耗時 3.653 秒 (3.086 MB/秒)。

安全性與最佳實務警示

  • xp_cmdshell 極高風險:預設僅 sysadmin 可執行,開啟即賦予 SQL Server 執行任意 OS 命令能力。生產環境嚴禁開啟,或嚴格限制 Proxy 帳號權限。
  • 網路共享暴露:備份檔含敏感資料,傳輸過程建議使用 IPSec/SSL 加密,或改用備份至本機再由應用層複製。
  • 現代替代方案:SQL Server 2005+ 可使用 備份至 URL (Azure Blob)、檔案資料表 (FileTable)、PowerShell/SMO 腳本 由應用層協調備份檔案傳輸,避免在資料庫層直接操作網路共享。
  • 權限最小化:備份操作帳號僅需 db_backupoperator,不需 sysadmin。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved