You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用PowerShell备份含加密存储过程的Azure SQL数据库并排除加密对象

解决Azure SQL导出Bacpac时忽略加密存储过程的问题

当然可以实现!问题在于New-AzureRmSqlDatabaseExport(包括新版的New-AzSqlDatabaseExport)Cmdlet并没有直接提供跳过加密对象的参数,不过我们可以直接调用底层的SqlPackage.exe工具(Azure SQL导出/导入的核心工具),它支持忽略加密对象的配置。

具体步骤:

  1. 找到SqlPackage.exe的路径
    这个工具通常随SQL Server Data Tools (SSDT)或Azure SQL SDK安装,常见路径类似:

    C:\Program Files\Microsoft SQL Server\150\DAC\bin\SqlPackage.exe
    

    版本号(比如150)可能根据你安装的版本不同有所变化,你可以用PowerShell搜索确认:

    Get-ChildItem -Path "C:\Program Files\Microsoft SQL Server" -Filter "SqlPackage.exe" -Recurse
    
  2. 构造导出命令并调用
    使用/p:IgnoreEncryptedObjects=True参数来跳过加密对象,下面是完整的PowerShell示例,替换成你的变量即可:

    # 替换为你的实际参数
    $ResourceGroupName = "你的资源组名称"
    $ServerName = "你的SQL服务器名称"
    $DatabaseName = "目标数据库名称"
    $BacpacUri = "https://你的存储账户.blob.core.windows.net/容器名/备份文件.bacpac"
    $AdministratorLogin = "SQL管理员账号"
    $AdministratorLoginPassword = ConvertTo-SecureString "管理员密码" -AsPlainText -Force
    $SqlPackagePath = "找到的SqlPackage.exe完整路径"
    
    # 调用SqlPackage执行导出,忽略加密对象
    & $SqlPackagePath `
      /a:Export `
      /ssn:$ServerName.database.windows.net `
      /sdn:$DatabaseName `
      /su:$AdministratorLogin `
      /sp:$($AdministratorLoginPassword | ConvertFrom-SecureString -AsPlainText) `
      /tf:$BacpacUri `
      /p:IgnoreEncryptedObjects=True
    

关键说明:

  • IgnoreEncryptedObjects=True参数会让工具自动跳过所有加密的数据库对象(包括存储过程、函数等),不会因为这些加密元素导致导出失败。
  • 由于这些存储过程无法解密,导出的Bacpac文件中不会包含它们,这是目前唯一可行的绕开方式,因为PowerShell的导出Cmdlet没有暴露这个配置项。

内容的提问来源于stack exchange,提问作者user3626232

火山引擎 最新活动