首页 > 解决方案 > PowerShell New-AzSqlDatabaseImport - 0:无法访问存储帐户。请检查存储帐户名称和密钥,然后重试

问题描述

我编写了一个 PowerShell 脚本,将本地 bacpac 文件复制到 Azure 存储帐户容器。将 bacpac 文件从本地文件系统复制到 Azure blob 容器后,我将 bacpac 文件的存储帐户密钥和 URI 提供给New-AzSqlDatabaseImport命令。

然而,它永远不会成功。我总是收到一条0: The storage account cannot be accessed. Please check the storage account name and key and try again错误消息。不幸的是,无论我尝试了什么,我都无法让它工作,而且该错误消息根本不是很有描述性或有帮助。在详细响应中,我看到严重性“16”代码“0”和“无法访问存储帐户。请检查存储帐户名称和密钥,然后重试”的消息。

是否-ResourceGroupName必须New-AzSqlDatabaseImport同时包含 SQL 服务器和存储帐户?需要启用哪些权限才能允许New-AzSqlDatabaseImport命令成功访问存储帐户?

我不明白我做错了什么。我对可以正常工作的命令使用相同的密钥Set-AzStorageBlobContent,所以我知道密钥是正确的。bacpac 文件的 URI 也是正确的。那么我做错了什么?存储帐户和 SQL Server 实例的资源组名称不同是否重要?防火墙中是否有我需要更改的存储帐户的内容?

任何帮助表示赞赏!

标签: sql-serverazurepowershellimport

解决方案


我们已经在本地环境中使用以下 cmdlet 进行了测试,我们可以成功导入 SQL 数据库,以下语句基于我们的分析。

  New-AzSqlDatabaseImport -ResourceGroupName "<resourceGroupName>" -ServerName "bacapserverdb" -DatabaseName "<DatabaseName>" -StorageKeyType "StorageAccessKey" -StorageKey "<storageAccountKey>" -StorageUri "<bacpacFileUri" -AdministratorLogin "<SQLServerUserName>" -AdministratorLoginPassword $SecureString -Edition Standard -ServiceObjectiveName S0 -DatabaseMaxSizeBytes 1073741824

参考下面的屏幕截图,从 Azure 门户中提取存储帐户的访问密钥

是否-ResourceGroupName必须New-AzSqlDatabaseImport同时包含 SQL 服务器和存储帐户?

您只需按照文档中的说明传递 SQL 数据库的 ResourceGroupName 。

需要启用哪些权限才能允许 New-AzSqlDatabaseImport命令成功访问存储帐户?

您不需要任何特殊权限,因为您将存储帐户访问密钥作为New-AzSqlDatabaseImport cmdlet 的一部分传递。

存储帐户和 SQL Server 实例的资源组名称不同是否重要?

当您传递New-AzSqlDatabaseImport命令的 SQL 数据库的资源组名称时。根据我的理解,即使两个资源都在不同的资源组中,这个操作也可以成功。

防火墙中是否有我需要更改的存储帐户的内容?

当我在本地环境中进行测试时,我们没有对存储帐户上的防火墙设置进行任何更改。

这是成功导入 sql 数据库的示例输出帖子。

导入\导出 SQL 数据库的限制:

  • 当允许访问 Azure 服务设置为关闭时,导入导出服务不起作用。
  • Import 不支持在创建新数据库时指定备份存储冗余,并使用默认的异地冗余备份存储冗余创建。要解决此问题,首先使用 Azure 门户或 PowerShell 创建具有所需备份存储冗余的空数据库,然后将 BACPAC 导入此空数据库。

推荐阅读