无需az-cli实现Azure Managed SQL通过SqlPackage导出到Blob容器自动化
可以不借助az-cli完成,以下是几种可行方案:
方案1:用.NET SDK整合导出与上传
先用SqlPackage完成数据库导出(通过代码调用命令行工具),再借助Azure Storage SDK直接把文件传到Blob容器:
- 第一步,安装NuGet包
Azure.Storage.Blobs - 示例代码(C#):
using Azure.Storage.Blobs; using System.Diagnostics; // 调用SqlPackage执行导出 var sqlPackageExe = @"C:\Program Files\Microsoft SQL Server\160\DAC\bin\SqlPackage.exe"; var exportCommand = $"/Action:Export /SourceServerName:your-managed-sql.database.windows.net /SourceDatabaseName:your-db /SourceUser:admin /SourcePassword:your-password /TargetFile:C:\temp\db-export.bacpac"; Process.Start(sqlPackageExe, exportCommand).WaitForExit(); // 上传到Blob容器 var storageConnString = "your-blob-storage-connection-string"; var containerName = "backup-container"; var containerClient = new BlobContainerClient(storageConnString, containerName); containerClient.UploadBlob("db-export.bacpac", File.OpenRead(@"C:\temp\db-export.bacpac"));
这种方式可以把流程整合到自动化程序或脚本里,全程可控,完全不依赖az-cli。
方案2:PowerShell + Azure Storage模块
用PowerShell先调用SqlPackage导出,再用Azure Storage模块的命令上传文件:
- 首次使用先安装模块:
Install-Module -Name Az.Storage - 示例脚本:
# 执行SqlPackage导出 $sqlPackagePath = "C:\Program Files\Microsoft SQL Server\160\DAC\bin\SqlPackage.exe" $exportParams = "/Action:Export /SourceServerName:your-managed-sql.database.windows.net /SourceDatabaseName:your-db /SourceUser:admin /SourcePassword:your-password /TargetFile:C:\temp\db-export.bacpac" & $sqlPackagePath $exportParams # 上传到Blob容器 $storageConn = "your-blob-storage-connection-string" $container = "backup-container" Set-AzStorageBlobContent -File "C:\temp\db-export.bacpac" -Container $container -Blob "db-export.bacpac" -ConnectionString $storageConn
自动化环境里要确保PowerShell已配置好权限,不需要交互式登录验证。
方案3:直接用SqlPackage导出到Blob(最简洁)
SqlPackage本身支持直接导出到Azure Blob容器,不用先存本地文件,一步到位:
SqlPackage.exe /Action:Export ` /SourceServerName:your-managed-sql.database.windows.net ` /SourceDatabaseName:your-db ` /SourceUser:admin ` /SourcePassword:your-password ` /TargetUrl:https://your-storage-account.blob.core.windows.net/your-container/db-export.bacpac ` /TargetStorageKey:your-storage-account-access-key
这个方案完全跳过本地文件环节,也不需要az-cli,是最省心的选择。
权限注意事项
不管用哪种方案,操作账号需要具备:
- Azure Managed SQL Server的导出权限(至少
db_backupoperator数据库角色) - Blob容器的写入权限(可以用存储账户访问密钥,或者通过Azure AD分配
Storage Blob Data Contributor角色)
内容的提问来源于stack exchange,提问作者Capitan Security
相关产品推荐
相关产品推荐

