Memberikan izin secara terprogram

Penting

Lakebase Autoscaling adalah versi terbaru Lakebase, dengan komputasi penskalaan otomatis, skala-ke-nol, percabangan, dan pemulihan instan. Untuk wilayah yang didukung, lihat Ketersediaan wilayah. Jika Anda adalah pengguna Lakebase Provisioned, lihat Lakebase Provisioned.

Izin proyek Lakebase dapat dikelola secara terprogram menggunakan API Izin Azure Databricks standar, CLI Azure Databricks, SDK Azure Databricks, dan Terraform.

Untuk gambaran umum jenis izin, izin default, dan cara mengelola izin di UI Lakebase, lihat Mengelola izin proyek.

Tingkatan izin

Tingkat izin yang dapat diberikan untuk proyek Lakebase adalah CAN_USE dan CAN_MANAGE. CAN_CREATE adalah tingkat yang diwariskan yang mengalir secara otomatis dari ruang kerja ke semua pengguna dan tidak dapat diberikan atau dicabut secara eksplisit pada proyek. Upaya untuk memberikan CAN_CREATE melalui API mengembalikan HTTP 400.

API Izin mengidentifikasi proyek berdasarkan ID proyek (misalnya, my-app). Anda dapat menemukan nilai ini di project_id bidang status proyek yang dikembalikan oleh API Dapatkan proyek dan Daftar proyek.

Nota

Bidang project_id ini tersedia dalam respons REST API tetapi belum tersedia di objek respons SDK atau CLI. Jika Anda menggunakan SDK, Anda dapat mengekstrak ID proyek dari name bidang dengan menghapus awalan projects/ (misalnya, projects/my-app menjadi my-app).

REST API

Izin proyek menggunakan API Izin Azure Databricks standar pada /api/2.0/permissions/database-projects/{project_id}.

Dapatkan izin akses saat ini

curl -X GET "https://${DATABRICKS_HOST}/api/2.0/permissions/database-projects/${PROJECT_ID}" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq

Memberikan atau memperbarui izin (PATCH)

curl -X PATCH "https://${DATABRICKS_HOST}/api/2.0/permissions/database-projects/${PROJECT_ID}" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "access_control_list": [
      {
        "user_name": "user@example.com",
        "permission_level": "CAN_USE"
      }
    ]
  }'

Untuk memberikan izin kepada grup atau perwakilan layanan, ganti user_name dengan group_name atau service_principal_name.

Nota

PATCH bersifat aditif dan tidak dapat menurunkan tingkat izin yang lebih tinggi yang ada. Misalnya, patching CAN_USE ke pengguna yang sudah memegang CAN_MANAGE tidak berpengaruh. Untuk menurunkan atau menghapus izin, gunakan PUT sebagai gantinya.

Ganti semua izin akses eksplisit (PUT)

Peringatan

PUT menggantikan seluruh ACL eksplisit. Setiap pengguna, grup, atau perwakilan layanan yang tidak disertakan dalam isi permintaan kehilangan izin yang diberikan secara eksplisit. Izin yang diwariskan (seperti admin ruang kerja) tidak terpengaruh.

curl -X PUT "https://${DATABRICKS_HOST}/api/2.0/permissions/database-projects/${PROJECT_ID}" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "access_control_list": [
      {
        "user_name": "user@example.com",
        "permission_level": "CAN_MANAGE"
      }
    ]
  }'

Untuk referensi API Izin lengkap, lihat API Izin.

CLI

databricks permissions Gunakan perintah (yang membungkus API Izin) untuk mengelola izin proyek dari baris perintah.

Memberikan atau memperbarui izin

# PROJECT_ID is your project ID (e.g., my-app).
databricks permissions update database-projects ${PROJECT_ID} \
  --json '{
    "access_control_list": [
      {
        "user_name": "user@example.com",
        "permission_level": "CAN_USE"
      }
    ]
  }'

Dapatkan izin akses saat ini

databricks permissions get database-projects ${PROJECT_ID}

Nota

Gunakan databricks permissions (bukan databricks postgres) untuk manajemen ACL proyek. databricks postgres Subperintah mengelola sumber daya proyek (cabang, komputasi, dll.), bukan izin.

SDK

Gunakan antarmuka WorkspaceClient.permissions di Python, Java, atau Go SDK untuk mengelola izin proyek.

Python SDK

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.iam import AccessControlRequest, PermissionLevel

w = WorkspaceClient()

# Your project ID (e.g., "my-app")
PROJECT_ID = "<project-id>"

# Grant CAN_USE to a user (PATCH is additive and cannot downgrade)
w.permissions.update(
    request_object_type="database-projects",
    request_object_id=PROJECT_ID,
    access_control_list=[
        AccessControlRequest(
            user_name="user@example.com",
            permission_level=PermissionLevel.CAN_USE,
        )
    ],
)

# Get current permissions
permissions = w.permissions.get(
    request_object_type="database-projects",
    request_object_id=PROJECT_ID,
)
print(permissions)

# Revoke or downgrade: use set() (PUT), not update() (PATCH)
# update() with an empty list is a no-op; set() replaces the full explicit ACL
w.permissions.set(
    request_object_type="database-projects",
    request_object_id=PROJECT_ID,
    access_control_list=[
        # Include every identity that should retain explicit access
        AccessControlRequest(
            user_name="owner@example.com",
            permission_level=PermissionLevel.CAN_MANAGE,
        )
    ],
)

Java SDK

import com.databricks.sdk.WorkspaceClient;
import com.databricks.sdk.service.iam.*;

WorkspaceClient w = new WorkspaceClient();

// Your project ID (e.g., "my-app")
String projectId = "<project-id>";

// Grant CAN_USE to a user (PATCH is additive and cannot downgrade)
w.permissions().update(new UpdateObjectPermissions()
    .setRequestObjectType("database-projects")
    .setRequestObjectId(projectId)
    .setAccessControlList(List.of(
        new AccessControlRequest()
            .setUserName("user@example.com")
            .setPermissionLevel(PermissionLevel.CAN_USE)
    ))
);

// Get current permissions
ObjectPermissions permissions = w.permissions().get(
    new GetPermissionRequest()
        .setRequestObjectType("database-projects")
        .setRequestObjectId(projectId)
);

Go SDK (Kit Pengembangan Perangkat Lunak)

import (
    "github.com/databricks/databricks-sdk-go"
    "github.com/databricks/databricks-sdk-go/service/iam"
)

w, _ := databricks.NewWorkspaceClient()

// Your project ID (e.g., "my-app")
projectID := "<project-id>"

// Grant CAN_USE to a user (Update is additive and cannot downgrade)
_, err := w.Permissions.Update(ctx, iam.UpdateObjectPermissions{
    RequestObjectType: "database-projects",
    RequestObjectId:   projectID,
    AccessControlList: []iam.AccessControlRequest{
        {
            UserName:        "user@example.com",
            PermissionLevel: iam.PermissionLevelCanUse,
        },
    },
})

// Get current permissions
permissions, err := w.Permissions.Get(ctx, iam.GetPermissionRequest{
    RequestObjectType: "database-projects",
    RequestObjectId:   projectID,
})

Langkah berikutnya