自动化Databricks SQL表或视图的权限



尝试自动设置Databricks SQL。

我已经从UI中完成了它,它很有效,所以这是自然的下一步。

我不确定的一件事是如何使用REST自动授予对SQL表和/或视图的访问权限。

我看过这个微软文档并下载了规范,但当我用Postman打开它时,我看到了permissions/objectType/Object-id,但我看到的唯一示例是";查询";。它似乎只适用于查询和仪表板。不能对表和视图执行此操作吗?我看不到更多的文件。

所以,基本上是如何做这样的事情grant select on tablename to group使用REST api而不使用Notebook作业。我很想看看我是否可以从我们的发布管道(Azure DevOps(中调用REST端点

到目前为止,还没有用于设置表ACL的REST API。但它是Unity目录的一部分,目前正在公开预览中。

如果你还不能使用Unity Catalog,那么你仍然可以通过使用Databricks Terraform Provider的databricks_sql_permissions资源来自动分配表ACL——它通过在集群上执行SQL命令来设置权限,但这对管理员来说是隐藏的。

这是Alex Ott答案的扩展,详细介绍了我试图让databricks_sql_permissions Resource为DatabricksSQL工作的内容,这是OP最初的问题。所有这些都假设人们不想/可以使用Unity Catalog,它遵循不同的权限模型,并具有不同的Terraform资源,即databricks_grants resource。

Alex的回答提到了表ACL,这让我感到惊讶,因为OP(和我自己(正在寻找Databricks SQL对象安全性,而不是经典工作区中的表ACL。但据我所知,这两者似乎是紧密相连的,Terraform提供程序寻址经典工作区(即非SQL(中的表ACL,这些ACL镜像到SQL工作区中的SQL对象。因此,如果您想通过Terraform在Databricks SQL中控制SQL权限,则需要在经典工作区(管理控制台(中启用表ACL。如果您(无论出于何种原因(无法启用表ACL,在我看来,唯一的其他选择是通过sql工作区中的sql脚本,缺点是必须显式地写出授予和撤销。潜在的替代方案是在只运行grant语句之前丢弃所有权限,但这还有其他负面影响。

所以我的方法是:

  1. 在经典工作区中启用表ACL(如果您不使用启用表ACL的集群afaik,这在经典工作空间中没有任何影响(
  2. 使用azurerm_databricks_workspace资源注册databricks Azure基础设施
  3. 使用databricks_sql_permissions资源来管理表ACL,从而管理sql对象的安全性

下面是一个对我有用的小例子,可能会激励其他人。它当然不遵循Terraform配置指南,但仅用于最低限度的说明。

注意:由于Terraform问题,我不得不忽略属性public_network_access_enabled的更改,请参阅GitHub问题:"azurerm_databricks_workspace";在public_network_access_enabled上强制替换,而它从未存在#15222

terraform {
required_providers {
azurerm = {
source  = "hashicorp/azurerm"
version = "=3.0.0"
}
databricks = {
source = "databricks/databricks"
version = "=1.4.0"
}
}
backend "azurerm" {
resource_group_name  = "tfstate"
storage_account_name = "tfsa"
container_name       = "tfstate"
key                  = "terraform.tfstate"
}
}
provider "azurerm" {
features {}
}
provider "databricks" {
azure_workspace_resource_id = "/subscriptions/mysubscriptionid/resourceGroups/myresourcegroup/providers/Microsoft.Databricks/workspaces/mydatabricksworkspace"
}
resource "azurerm_databricks_workspace" "adbtf" {
customer_managed_key_enabled = false
infrastructure_encryption_enabled = false
load_balancer_backend_address_pool_id = null
location = "westeurope"
managed_resource_group_name = "databricks-rg-myresourcegroup-abcdefg12345"
managed_services_cmk_key_vault_key_id = null
name = "mydatabricksworkspace"
network_security_group_rules_required = null
public_network_access_enabled = null
resource_group_name = "myresourcegroup"
sku = "premium"
custom_parameters {
machine_learning_workspace_id = null
nat_gateway_name = "nat-gateway"
no_public_ip = false
private_subnet_name = null
private_subnet_network_security_group_association_id = null
public_ip_name = "nat-gw-public-ip"
public_subnet_name = null
public_subnet_network_security_group_association_id = null
storage_account_name = "dbstorageabcde1234"
storage_account_sku_name = "Standard_GRS"
virtual_network_id = null
vnet_address_prefix = "10.139"
}
tags = {
creator = "me"
}
lifecycle {
ignore_changes = [
public_network_access_enabled
]
}
}
data "databricks_current_user" "me" {}
resource "databricks_sql_permissions" "database_test" {
database = "test"
privilege_assignments {
principal  = "myuser@mydomain.com"
privileges = ["USAGE"]
}
}
resource "databricks_sql_permissions" "table_test_student" {
database = "test"
table = "student"
privilege_assignments {
principal  = "myuser@mydomain.com"
privileges = ["SELECT", "MODIFY"]
}
}
output "adb_id" {
value = azurerm_databricks_workspace.adbtf.id
}

注意:Serge Smertin(Terraform Databricks维护者(在GitHub问题中提到:[DOC]Databricks_sql_permissions资源将被弃用#1215,databricks_sql_permissions资源已被弃用,但我在文档中找不到任何关于这一点的指示,只是建议在利用Unity Catalog时使用另一种资源,我没有这样做。

最新更新