Azure 数据库管理权限

Permissions for Azure database management

我正在开发一个连接到 Microsoft Azure 的小应用程序,列出属于特定资源组的所有数据库,并导出所有所述数据库。为此,我正在使用 Microsoft.WindowsAzure.Management.Sql 库。

this guide 之后,我成功地在 AD 中为我的应用程序设置了一个应用程序注册,并为其分配了 Owner 角色(用于测试),使用 Azure 进行身份验证并获取访问令牌.

但是,当我尝试使用该令牌对数据库执行任何操作(例如列出所有数据库,使用 IServerOperations.List)时,出现以下异常:

ForbiddenError: The server failed to authenticate the request. Verify that the certificate is valid and is associated with this subscription.

租户 ID、订阅 ID、客户端 ID 和客户端密码都是正确的,更改其中任何一个都会导致不同的异常,已经在身份验证阶段。

我该如何解决这个问题?如果正确答案是 "switch to Microsoft.Azure.Management.Sql" 我完全同意,但如果可能的话我至少想了解 为什么 会发生这种情况。

HIf the correct answer is "switch to Microsoft.Azure.Management.Sql" I'm perfectly fine with that, but if possible I'd at least like to understand why this is happening.

Microsoft.WindowsAzure.Management.Sql 实现了 ASM API(Azure 旧 API)。

您收到此错误的原因是因为您正在尝试 authenticate/authorize 具有 application 权限的 Azure 资源管理器 (ASM) API . 但是服务管理 API 是委托权限,而不是应用程序权限。

有关如何为 ASMARM Rest API 进行身份验证的更多详细信息,请参阅另一个 .

How can I fix this?

Microsoft.Azure.Management.Sql 实现了 ARM API。正如您提到的,您可以使用 Microsoft.Azure.Management.Sql 来代替 Microsoft.WindowsAzure.Management.Sql

或者您可以使用基于 X509 证书 的授权来授权您的 ASM API 请求。 有关如何使用管理证书进行身份验证的更多信息,您可以参考此 tutorial.

注意:建议使用Microsoft.Azure.Management.Sql代替Microsoft.WindowsAzure.Management.Sql