当前位置: 首页 > 知识库问答 >
问题:

用RBAC在Azure Cosmos DB帐户内创建数据库

欧镜
2023-03-14

我为azure cosmos db使用java版本4 SDK。我想在azure cosmos db帐户中使用服务主体创建数据库,而不是使用主密钥。

根据该文档,我为服务主体分配了< code > document DB Account Contributor 和< code>Cosmos DB Operator内置角色定义:

https://docs.microsoft.com/pl-pl/azure/role-based-access-control/built-in-roles#cosmos-db-operator

我无法创建 CosmosAsyncClient,直到我添加了新的自定义角色,该角色仅包含读取元数据。上面提到的内置角色定义不包含它...

 TokenCredential ServicePrincipal = new ClientSecretCredentialBuilder()
            .authorityHost("https://login.microsoftonline.com")
            .tenantId(tenant_here)
            .clientId(clientid_here)
            .clientSecret(secret_from_above_client)
            .build();

 client = new CosmosClientBuilder()
                            .endpoint(AccountSettings.HOST)
                            .credential(ServicePrincipal)
                            .buildAsyncClient();

添加此角色后,创建了客户端,但下一步我无法在其中创建数据库实例和容器。在权限改造中,我可以看到角色已分配,因此此处的服务主体是正确的。

更重要的是,当我首先用主密钥创建数据库和容器,然后我想使用服务主体读/写数据时,它工作了(显然在添加了用于写的自定义角色之后)。

然后我不知道为什么DocumentDB帐户贡献者Cosmos DB操作员不适用于创建数据库。

共有1个答案

逄征
2023-03-14

看起来这是java SDK中的一个错误,DocumentDB帐户贡献者角色足以创建数据库和容器,因为它具有Microsoft.DocumentDb/databaseAccounts/*权限(*是一个通配符,它还包括您提到的Microsoft.DocumentDB/databaseAccounts/readMetadata)。

当我测试使用具有此角色的服务主体来创建带有powershell<code>新AzCosmosDBSqlDatabase<code>的数据库时,它运行良好。当使用服务主体运行此命令时,它本质上使用Azure AD客户端凭据流获取令牌,然后使用令牌调用REST API-<code>PUThttps://management.azure.com/subscriptions/xxxx/resourceGroups/xxxx/providers/Microsoft.DocumentDB/databaseAccounts/xxxx/sqlDatabases/testdb1?api-version=2020-04-01为了创建数据库,java SDK本质上也做了同样的事情,因此它也应该工作。

 类似资料:
  • 是否可以使用java代码创建/删除windows用户帐户并设置其权限以使其成为管理员帐户、简单用户帐户或来宾帐户?

  • 我想问如何创建两个单独的登录意图。例如,一个是给客户的,一个是给管理员检查细节的。 在这段代码中,它只能显示客户部分,但我如何输入另一种方式,在那里有单独的管理或管理和客户的使用? 更新的一个

  • 我正在尝试使用jmeter模拟在我的测试站点上创建的500个用户名/密码。主页有3个字段,用户名、电子邮件地址和密码。如何让jmeter自动填充这些字段?下一个问题是,jmeter是否可以转到下一页,例如填写信用信息?

  • MySQL 是一个使用广泛的数据库服务器,你肯定会在某些节点上安装配置 MySQL 服务器。 本节将向你展示如何安装配置 MySQL 服务器,以及如何为应用程序自动创建数据库和用户。 准备工作 如果你还没有 MySQL 模块,先创建一个: # mkdir /etc/puppet/modules/mysql # mkdir /etc/puppet/modules/manifests # mkdir

  • 我试图创建一个路由53记录集从帐户1在帐户2. 通过阅读其他帖子和在线搜索,我想做这样的事情: 想从有经验的人那里知道这是否是正确的方法吗?或者有没有更好的方法来实现上面? 更新代码如下:

  • 安装oracle 19C后,它要求用户名和密码。输入什么,以及如何创建一个具有所有权限和身份验证权限的新用户。(注意,我试图通过登录SYSDBA创建用户命令,但它显示错误为无效的普通用户或角色名.在这里输入图像描述 [在此处输入图像描述][2]