Membuat peran Postgres

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.

Saat Anda membuat proyek, Lakebase membuat beberapa peran Postgres dalam proyek:

  • Peran Postgres untuk identitas pemilik proyek di Azure Databricks (misalnya, user@databricks.com), yang memiliki database default databricks_postgres.
  • Peran databricks_superuser administratif

Kedua peran ini terlihat di tab Peran & Database saat Anda pertama kali membuka proyek Anda.

Database databricks_postgres dibuat sehingga Anda dapat menyambungkan dan mencoba Lakebase segera setelah pembuatan proyek.

Beberapa peran yang dikelola oleh sistem juga telah dibuat. Ini adalah peran internal yang digunakan oleh layanan Azure Databricks untuk manajemen, pemantauan, dan operasi data.

Nota

Peran Postgres mengontrol akses database (siapa yang dapat mengkueri data). Untuk izin proyek (siapa yang dapat mengelola infrastruktur), lihat Izin proyek. Untuk tutorial tentang menyiapkan keduanya, lihat Tutorial: Memberikan proyek dan akses database ke pengguna baru.

Lihat Peran yang telah dibuat sebelumnya dan Peran sistem.

Membuat peran Postgres

Lakebase mendukung dua jenis peran Postgres untuk akses database:

  • Peran OAuth untuk identitas Azure Databricks: Buat ini menggunakan UI Lakebase, databricks_auth ekstensi dengan SQL, atau Python SDK dan REST API. Mengaktifkan identitas Azure Databricks (pengguna, perwakilan layanan, dan grup) untuk terhubung menggunakan token OAuth.
  • Peran kata sandi Postgres asli: Buat ini menggunakan UI Lakebase, SQL, atau Python SDK dan REST API. Gunakan nama peran yang valid dengan autentikasi kata sandi.

Untuk panduan tentang memilih jenis peran yang akan digunakan, lihat Gambaran umum autentikasi. Masing-masing dirancang untuk kasus penggunaan yang berbeda.

Membuat peran OAuth untuk identitas Azure Databricks

Untuk mengizinkan identitas Azure Databricks (pengguna, perwakilan layanan, atau grup) terhubung menggunakan token OAuth, buat peran OAuth menggunakan UI Lakebase, databricks_auth ekstensi dengan SQL, atau REST API.

Untuk petunjuk terperinci tentang mendapatkan token OAuth, lihat Mendapatkan token OAuth dalam alur pengguna-ke-mesin dan Mendapatkan token OAuth dalam alur mesin-ke-mesin.

Antarmuka Pengguna

  1. Di tab Peran & Database>Tambahkan peran>OAuth , pilih pengguna, perwakilan layanan, atau grup untuk memberikan akses database.
  2. Setelah membuat peran, berikan izin database yang sesuai. Pelajari caranya: Mengelola izin

Tambahkan peran — tab OAuth

SQL

Prasyarat:

  • Anda harus memiliki CREATE dan CREATE ROLE izin pada database
  • Anda harus diautentikasi sebagai identitas Azure Databricks dengan token OAuth yang valid
  • Sesi terautentikasi Postgres asli tidak dapat membuat peran OAuth
  1. databricks_auth Buat ekstensi. Setiap database Postgres harus memiliki ekstensinya sendiri.

    CREATE EXTENSION IF NOT EXISTS databricks_auth;
    
  2. databricks_create_role Gunakan fungsi untuk membuat peran Postgres untuk identitas Azure Databricks:

    SELECT databricks_create_role('identity_name', 'identity_type');
    

    Untuk pengguna Azure Databricks:

    SELECT databricks_create_role('myuser@databricks.com', 'USER');
    

    Untuk perwakilan layanan Azure Databricks:

    SELECT databricks_create_role('8c01cfb1-62c9-4a09-88a8-e195f4b01b08', 'SERVICE_PRINCIPAL');
    

    Untuk grup Azure Databricks:

    SELECT databricks_create_role('My Group Name', 'GROUP');
    

    Nama grup sensitif terhadap huruf besar/kecil dan harus persis sesuai dengan yang muncul di ruang kerja Azure Databricks Anda. Saat Anda membuat peran Postgres untuk grup, setiap anggota langsung atau tidak langsung (pengguna atau perwakilan layanan) dari grup Databricks tersebut dapat mengautentikasi ke Postgres sebagai peran grup menggunakan token OAuth individual mereka. Model izin tingkat grup ini memungkinkan Anda mengelola izin di Postgres alih-alih mempertahankan izin untuk pengguna individual.

  3. Berikan izin database ke peran baru.

Fungsi ini databricks_create_role() membuat peran Postgres dengan LOGIN izin saja. Setelah membuat peran, Anda harus memberikan hak istimewa dan izin database yang sesuai pada database, skema, atau tabel tertentu yang perlu diakses pengguna. Pelajari caranya: Mengelola izin

Python SDK

Atur identity_type ke USER, SERVICE_PRINCIPAL, atau GROUP. Atur postgres_role ke alamat email identitas, ID aplikasi (UUID), atau nama tampilan grup masing-masing. Nilai ini menjadi nama peran Postgres dan yang Anda gunakan dalam string koneksi dan pernyataan GRANT.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Role, RoleIdentityType, RoleRoleSpec

w = WorkspaceClient()

operation = w.postgres.create_role(
    parent="projects/my-project/branches/production",
    role=Role(
        spec=RoleRoleSpec(
            identity_type=RoleIdentityType.USER,
            postgres_role="user@example.com"
        )
    )
)
role = operation.wait()
print(f"Created role: {role.name}")

Setelah membuat peran, berikan izin database yang sesuai. Pelajari caranya: Mengelola izin

CLI

Atur identity_type ke USER, SERVICE_PRINCIPAL, atau GROUP. Atur postgres_role ke alamat email identitas, ID aplikasi (UUID), atau nama tampilan grup masing-masing. Nilai ini menjadi nama peran Postgres dan yang Anda gunakan dalam string koneksi dan pernyataan GRANT.

Untuk pengguna Azure Databricks:

databricks postgres create-role projects/my-project/branches/production \
  --role-id my-user-role \
  --json '{"spec": {"identity_type": "USER", "postgres_role": "user@example.com"}}'

Untuk perwakilan layanan Azure Databricks:

databricks postgres create-role projects/my-project/branches/production \
  --role-id my-sp-role \
  --json '{"spec": {"identity_type": "SERVICE_PRINCIPAL", "postgres_role": "8c01cfb1-62c9-4a09-88a8-e195f4b01b08"}}'

Untuk grup Azure Databricks:

databricks postgres create-role projects/my-project/branches/production \
  --role-id my-group-role \
  --json '{"spec": {"identity_type": "GROUP", "postgres_role": "My Group Name"}}'

Perintah menunggu operasi selesai dan mengembalikan peran yang telah dibuat. Gunakan --no-wait untuk langsung kembali dan memantau secara terpisah dengan databricks postgres get-operation.

Setelah membuat peran, berikan izin database yang sesuai. Pelajari caranya: Mengelola izin

melengkung

Atur identity_type ke USER, SERVICE_PRINCIPAL, atau GROUP. Atur postgres_role ke alamat email identitas, ID aplikasi (UUID), atau nama tampilan grup masing-masing. Nilai ini menjadi nama peran Postgres dan yang Anda gunakan dalam string koneksi dan pernyataan GRANT.

curl -X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "spec": {
      "identity_type": "USER",
      "postgres_role": "user@example.com"
    }
  }' | jq

Titik akhir mengembalikan operasi yang berjalan lama. Polling hingga done adalah true, lalu gunakan bidang peran name untuk panggilan API berikutnya. Lihat Operasi jangka panjang.

Setelah membuat peran, berikan izin database yang sesuai. Pelajari caranya: Mengelola izin

Autentikasi berbasis grup

Saat Anda membuat peran Postgres untuk grup Azure Databricks, Anda mengaktifkan autentikasi berbasis grup. Ini memungkinkan setiap anggota grup Azure Databricks untuk mengautentikasi ke Postgres menggunakan peran grup, menyederhanakan manajemen izin.

Cara kerjanya:

  1. Buat peran Postgres untuk grup Azure Databricks.
  2. Berikan hak akses database ke role grup di Postgres. Lihat Mengelola izin.
  3. Setiap anggota langsung atau tidak langsung (pengguna atau perwakilan layanan) dari grup Azure Databricks dapat terhubung ke Postgres menggunakan token OAuth individual mereka.
  4. Saat menghubungkan, anggota mengotentikasi diri sebagai peran grup dan mewarisi semua izin yang Anda berikan kepada peran tersebut.

Alur autentikasi:

Saat anggota grup terhubung, mereka menentukan nama peran Postgres grup sebagai nama pengguna dan token OAuth mereka sendiri sebagai kata sandi:

export PGPASSWORD='<OAuth token of a group member>'
export GROUP_ROLE_NAME='<pg-case-sensitive-group-role-name>'

psql -h $HOSTNAME -p 5432 -d databricks_postgres -U $GROUP_ROLE_NAME

pertimbangan Penting:

  • Validasi keanggotaan grup: Keanggotaan grup hanya divalidasi pada waktu autentikasi. Jika anggota dihapus dari grup Azure Databricks setelah membuat koneksi, koneksi tetap aktif. Upaya koneksi baru dari anggota yang dihapus ditolak.
  • Cakupan ruang kerja: Hanya grup yang ditetapkan ke ruang kerja Azure Databricks yang sama dengan proyek yang didukung untuk autentikasi berbasis grup. Untuk mempelajari cara menetapkan grup ke ruang kerja, lihat Mengelola grup.
  • Sensitivitas kasus: Nama grup yang digunakan databricks_create_role() harus cocok dengan nama grup persis seperti yang muncul di ruang kerja Azure Databricks Anda, termasuk kasus.
  • Manajemen izin: Mengelola izin di tingkat grup di Postgres lebih efisien daripada mengelola izin pengguna individual. Saat Anda memberikan izin ke peran grup, semua anggota grup saat ini dan yang akan datang mewarisi izin tersebut secara otomatis.
  • Penggantian nama identitas: Jika email pengguna atau nama tampilan grup berubah di Azure Databricks, autentikasi dan izin database yang sudah ada akan terputus. Hilangkan peran lama, buat peran baru dengan nama yang telah diperbarui, dan perbarui string koneksi serta hak akses.

Nota

Nama peran tidak boleh melebihi 63 karakter, dan beberapa nama tidak diizinkan. Pelajari lebih lanjut: Mengelola peran

Membuat peran kata sandi Postgres asli

Koneksi kata sandi dapat dinonaktifkan di tingkat proyek atau komputasi. Lihat Memblokir koneksi kata sandi.

Antarmuka Pengguna

  1. Di tab Peran & Database> Tambahkankata sandi>, masukkan nama peran dan secara opsional memberikan databricks_superuser atau atribut sistem (CREATEDB, CREATEROLE, BYPASSRLS).
  2. Salin kata sandi yang dihasilkan dan berikan dengan aman kepada pengguna. Ini tidak ditampilkan lagi.

Tambahkan peran — tab Kata Sandi

SQL

CREATE ROLE role_name WITH LOGIN PASSWORD 'your_secure_password';

Kata sandi harus memiliki setidaknya 12 karakter dengan campuran huruf kecil, huruf besar, angka, dan karakter simbol. Kata sandi yang ditentukan pengguna divalidasi pada waktu pembuatan untuk memverifikasi entropi 60-bit.

Python SDK

Hilangkan identity_type untuk membuat peran kata sandi. API mengembalikan kata sandi yang dihasilkan dalam respons.

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import Role, RoleRoleSpec

w = WorkspaceClient()

operation = w.postgres.create_role(
    parent="projects/my-project/branches/production",
    role=Role(
        spec=RoleRoleSpec(
            postgres_role="my-app-role"
        )
    )
)
role = operation.wait()
print(f"Created role: {role.name}")

CLI

Hilangkan identity_type untuk membuat peran kata sandi. API menghasilkan kata sandi dan mengembalikannya dalam respons.

databricks postgres create-role projects/my-project/branches/production \
  --role-id my-app-role \
  --json '{"spec": {"postgres_role": "my-app-role"}}'

Perintah menunggu operasi selesai. Respons mencakup kata sandi yang dihasilkan — simpan dengan aman, karena tidak ditampilkan lagi.

melengkung

Hilangkan identity_type untuk membuat peran kata sandi. Titik akhir mengembalikan operasi yang berjalan lama. Polling sampai done menjadi true.

curl -X POST "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "spec": {
      "postgres_role": "my-app-role"
    }
  }' | jq

Nota

Peran kata sandi Postgres asli mendukung pengumpul koneksi bawaan. Lihat Menggunakan pengumpulan koneksi.

Menampilkan peran Postgres

Antarmuka Pengguna

Untuk melihat semua peran Postgres dalam proyek Anda, navigasikan ke tab Peran & Database cabang Anda di Aplikasi Lakebase. Semua peran yang dibuat di cabang, dengan pengecualian Peran Sistem, ditampilkan. Kolom Jenis autentikasi menunjukkan apakah setiap peran menggunakan otentikasi OAuth atau Kata Sandi.

Daftar peran

PostgreSQL

Lihat semua peran dengan \du perintah:

Anda dapat melihat semua peran Postgres, termasuk peran sistem, menggunakan \du meta-command dari klien Postgres apa pun (seperti psql) atau editor Lakebase SQL:

\du
                                      List of roles
          Role name          |                         Attributes
-----------------------------+------------------------------------------------------------
 cloud_admin                 | Superuser, Create role, Create DB, Replication, Bypass RLS
 my.user@databricks.com      | Create role, Create DB, Bypass RLS
 databricks_control_plane    | Superuser
 databricks_gateway          |
 databricks_monitor          |
 databricks_reader_12345     | Create role, Create DB, Replication, Bypass RLS
 databricks_replicator       | Replication
 databricks_superuser        | Create role, Create DB, Cannot login, Bypass RLS
 databricks_writer_12345     | Create role, Create DB, Replication, Bypass RLS

Python SDK

Mencantumkan semua peran:

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

roles = w.postgres.list_roles(parent="projects/my-project/branches/production")
for role in roles:
    print(f"{role.status.postgres_role} ({role.status.identity_type or 'PASSWORD'}): {role.name}")

Dapatkan peran tertentu:

role = w.postgres.get_role(
    name="projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx"
)
print(role)

CLI

Mencantumkan semua peran:

databricks postgres list-roles projects/my-project/branches/production

Dapatkan peran tertentu:

databricks postgres get-role projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx

Output mencakup name bidang (misalnya, rol-xxxx-xxxxxxxxxx) yang diperlukan untuk memperbarui dan menghapus panggilan.

melengkung

Mencantumkan semua peran:

curl -X GET "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq

Dapatkan peran tertentu:

curl -X GET "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq

Respons mencakup bidang name (misalnya, rol-xxxx-xxxxxxxxxx) yang diperlukan untuk perintah pembaruan dan penghapusan.

Memperbarui peran

Untuk memperbarui atribut peran di UI, pilih Edit peran dari menu peran di tab Peran dan Database .

Gunakan API atau CLI untuk memperbarui peran sistem atau atribut dari sebuah peran. Hanya bidang yang ditentukan dalam masker pembaruan yang berubah.

Nota

Untuk mendapatkan nama sumber daya dari suatu peran yang digunakan dalam memperbarui dan menghapus panggilan, gunakan titik akhir daftar peran. Nama sumber daya peran menggunakan pengidentifikasi yang dihasilkan sistem (misalnya, rol-xxxx-xxxxxxxxxx), bukan nilai yang disediakan saat pembuatan postgres_role.

CLI

Perbarui peran menggunakan pola masker pembaruan. Masker pembaruan adalah argumen posisi kedua setelah nama sumber daya.

Saat memperbarui spec.attributes, Anda harus menyediakan ketiga bidang atribut (createdb, , createrole) bypassrls— API menggantikan seluruh objek atribut:

databricks postgres update-role \
  projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx \
  "spec.attributes" \
  --json '{
    "spec": {
      "attributes": {"createdb": true, "createrole": false, "bypassrls": false}
    }
  }'

Untuk memperbarui peran keanggotaan, tambahkan spec.membership_roles ke masker pembaruan:

databricks postgres update-role \
  projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx \
  "spec.membership_roles" \
  --json '{"spec": {"membership_roles": ["DATABRICKS_SUPERUSER"]}}'

Untuk menghapus databricks_superuser, berikan array kosong: "membership_roles": [].

melengkung

curl -X PATCH "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx?update_mask=spec.membership_roles%2Cspec.attributes.createdb" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx",
    "spec": {
      "membership_roles": ["DATABRICKS_SUPERUSER"],
      "attributes": { "createdb": true }
    }
  }' | jq

Untuk menghapus databricks_superuser, berikan array kosong: "membership_roles": [].

Menghilangkan peran Postgres

Anda dapat menghilangkan peran berbasis identitas Azure Databricks dan peran kata sandi Postgres bawaan.

Antarmuka Pengguna

Menghapus peran adalah tindakan permanen yang tidak dapat dibatalkan. Untuk menghapus peran yang memiliki database, Anda harus menentukan peran untuk mengalihkan kepemilikan objek yang dimiliki. Jika tidak, database harus dihapus secara manual sebelum menghapus peran yang memiliki database.

Untuk menghapus peran Postgres apa pun menggunakan UI:

  1. Buka tab Peran dan Database cabang Anda di Aplikasi Lakebase.
  2. Pilih Hapus peran dari menu peran dan konfirmasi penghapusan.

PostgreSQL

Anda dapat menghilangkan peran Postgres apa pun menggunakan perintah Postgres standar. Untuk detailnya, lihat dokumentasi PostgreSQL tentang menghilangkan peran.

Hilangkan peran:

DROP ROLE role_name;

Setelah peran berbasis identitas Azure Databricks dihilangkan, identitas tersebut tidak dapat lagi mengautentikasi ke Postgres menggunakan token OAuth hingga peran baru dibuat.

CLI

databricks postgres delete-role \
  projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx

Jika peran memiliki objek database, gunakan --reassign-owned-to untuk mentransfer kepemilikan ke peran lain sebelum penghapusan:

databricks postgres delete-role \
  projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx \
  --reassign-owned-to projects/my-project/branches/production/roles/rol-yyyy-yyyyyyyyyy

Python SDK

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

operation = w.postgres.delete_role(
    name="projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx"
)
operation.wait()

melengkung

curl -X DELETE "$WORKSPACE/api/2.0/postgres/projects/my-project/branches/production/roles/rol-xxxx-xxxxxxxxxx" \
  -H "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq

Peran yang telah dibuat sebelumnya

Setelah proyek dibuat, Azure Databricks secara otomatis membuat peran Postgres untuk administrasi proyek dan memulai.

Role Description Hak istimewa yang diwariskan
<project_owner_role> Identitas Azure Databricks dari pembuat proyek (misalnya, my.user@databricks.com). Peran ini memiliki database default databricks_postgres dan dapat masuk dan mengelola proyek. Anggota dari databricks_superuser
databricks_superuser Peran administratif internal. Digunakan untuk mengonfigurasi dan mengelola akses di seluruh proyek. Peran ini diberikan hak istimewa yang luas. Mewarisi dari pg_read_all_data, pg_write_all_data, dan pg_monitor.

Pelajari selengkapnya tentang kemampuan dan hak istimewa khusus peran ini: Kemampuan peran yang telah dibuat sebelumnya

Peran sistem yang dibuat oleh Azure Databricks

Azure Databricks membuat peran sistem berikut yang diperlukan untuk layanan internal. Anda dapat melihat peran ini dengan menjalankan perintah \du dari psql atau melalui Editor Lakebase SQL.

Role Tujuan
cloud_admin Peran superuser yang digunakan untuk manajemen infrastruktur cloud
databricks_control_plane Peran superuser yang digunakan oleh komponen Databricks internal untuk operasi manajemen
databricks_monitor Digunakan oleh layanan pengumpulan metrik internal
databricks_replicator Digunakan untuk operasi replikasi database
databricks_writer_<dbid> Peran per database yang digunakan untuk membuat dan mengelola tabel yang disinkronkan
databricks_reader_<dbid> Peran per database yang digunakan untuk membaca tabel yang terdaftar di Katalog Unity
databricks_gateway Digunakan untuk koneksi internal untuk layanan penyajian data terkelola

Untuk mempelajari cara kerja peran, hak istimewa, dan keanggotaan peran di Postgres, gunakan sumber daya berikut dalam dokumentasi Postgres:

Langkah selanjutnya