id
Panduan
Server
Mengonfigurasi database
idGuidesServerDb

Configuring the database

Panduan ini menjelaskan cara mengonfigurasi server NQRust-Identity untuk menyimpan data dalam database relational.

Database yang Didukung

Server memiliki dukungan bawaan untuk berbagai database. Anda dapat menanyakan database yang tersedia dengan melihat nilai yang diharapkan untuk opsi konfigurasi db. Tabel berikut mencantumkan database yang didukung dan versi yang teruji.

DatabaseNilai OpsiVersi TerujiVersi Didukung
MariaDB Servermariadb11.811.8 (LTS), 11.4 (LTS), 10.11 (LTS), 10.6 (LTS)
Microsoft SQL Servermssql20222022, 2019
MySQLmysql8.48.4 (LTS), 8.0 (LTS)
Oracle Databaseoracle23.523.x (mis. 23.5+), 19c (19.3+) (Catatan: Oracle RAC juga didukung jika menggunakan versi mesin database yang sama, mis. 23.5+, 19.3+)
PostgreSQLpostgres1818.x, 17.x, 16.x, 15.x, 14.x
EnterpriseDB Advancedpostgres1818.x, 17.x
Amazon Aurora PostgreSQLpostgres17.517.x, 16.x, 15.x
Azure SQL Databasemssqlterkiniterkini
Azure SQL Managed Instancemssqlterkiniterkini

Konfigurasi yang tidak didukung jika dialek Hibernate spesifik database yang mendasarinya memungkinkan penggunaan versi yang berbeda dari yang ditunjukkan.

Secara default, server menggunakan database dev-file. Ini adalah database default yang akan digunakan server untuk menyimpan data dan hanya ada untuk kasus penggunaan pengembangan. Database dev-file tidak layak untuk kasus penggunaan produksi dan harus diganti sebelum deploy ke produksi.

Menginstall driver database

Driver database dikirimkan sebagai bagian dari NQRust-Identity kecuali untuk driver Oracle Database.

Install driver yang hilang secara manual jika Anda ingin menghubungkan ke database ini ataulewati bagian ini jika Anda ingin menghubungkan ke database yang berbeda di mana driver database sudah disertakan.

Mengganti driver database bawaan atau menyediakan driver Anda sendiri dianggap tidak didukung. Pengecualian yang didukung hanya yang jelas terdokumentasikan dalam panduan ini, seperti driver Oracle Database.

Menginstall driver Oracle Database

Untuk menginstall driver Oracle Database untuk NQRust-Identity:

  1. Unduh file JAR ojdbc17 dan orai18n dari salah satu sumber berikut:

  2. Zipped JDBC driver and Companion Jars versi 23.26.0.0.0 dari halaman unduh driver Oracle (opens in a new tab).

  3. Maven Central melalui ojdbc17 dan orai18n.

  4. Media install yang direkomendasikan oleh vendor database untuk database tertentu yang digunakan.

  5. Ketika menjalankan distribusi yang tidak diungkapkan: Letakkan file JAR ojdbc17 dan orai18n di folder providers NQRust-Identity

  6. Ketika menjalankan kontainer: Bangun image NQRust-Identity khusus dan tambahkan file JAR di folder providers. Ketika membangun image khusus untuk Operator, image tersebut perlu berupa image yang dioptimalkan dengan semua opsi waktu build NQRust-Identity diatur.

Sebuah Containerfile minimum untuk membangun image yang dapat digunakan dengan Operator NQRust-Identity dan mencakup driver JDBC database Oracle yang diunduh dari Maven Central terlihat seperti berikut:

FROM quay.io/keycloak/keycloak:latest
ADD --chown=keycloak:keycloak --chmod=644 https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc17/23.26.0.0.0/ojdbc17-23.26.0.0.0.jar /opt/keycloak/providers/ojdbc17.jar
ADD --chown=keycloak:keycloak --chmod=644 https://repo1.maven.org/maven2/com/oracle/database/nls/orai18n/23.26.0.0.0/orai18n-23.26.0.0.0.jar /opt/keycloak/providers/orai18n.jar
# Mengatur parameter build untuk database:
ENV KC_DB=oracle
# Tambahkan semua parameter build yang diperlukan, misalnya aktifkan kesehatan dan metriks:
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true
# Untuk dapat menggunakan image dengan Operator Keycloak, image tersebut perlu dioptimalkan, yang memerlukan langkah build Keycloak:
RUN /opt/keycloak/bin/kc.sh build

Kemudian lanjutkan konfigurasi database seperti yang dijelaskan dalam bagian berikutnya.

Mengonfigurasi Database

Untuk setiap database yang didukung, server menyediakan beberapa pengaturan default yang berpendapat untuk menyederhanakan konfigurasi database. Anda melengkapi konfigurasi dengan memberikan beberapa pengaturan penting seperti host database dan kredensial.

Konfigurasi dapat diatur selama perintah build atau perintah start:

  1. Menggunakan perintah build diikuti dengan perintah start yang dioptimalkan (direkomendasikan)

Pertama, pengaturan minimum yang diperlukan untuk terhubung ke database dapat ditentukan dalam conf/keycloak.conf:

# Pemasok database.
db=postgres

# Nama pengguna database.
db-username=keycloak

# Kata sandi pengguna database.
db-password=change_me

# Menetapkan nama host dari URL JDBC default yang dipilih
db-url-host=keycloak-postgres

Kemudian, perintah berikut menciptakan gambar server baru dan dioptimalkan berdasarkan opsi konfigurasi dan memulai server.

bin/kc.[sh|bat] build
bin/kc.[sh|bat] start --optimized
  1. Menggunakan hanya perintah start (tanpa --optimized)
bin/kc.[sh|bat] start --db postgres --db-url-host keycloak-postgres --db-username keycloak --db-password change_me
⚠️

Contoh di atas mencakup pengaturan minimum yang diperlukan untuk terhubung ke database tetapi mengungkapkan kata sandi database dan tidak direkomendasikan. Gunakan conf/nqrust-identity.conf seperti yang ditunjukkan di atas, variabel lingkungan, atau penyimpanan kunci untuk setidaknya kata sandi.

Jika kata sandi database Anda berisi karakter $ atau $\{…​}, gunakan variabel lingkungan KCRAW_DB_PASSWORD bukan KC_DB_PASSWORD. Awalan KCRAW_ memastikan karakter $ dipertahankan sebagaimana adanya. Lihat bagian Menyimpan nilai literal dengan awalan KCRAW di Mengonfigurasi NQRust-Identity untuk detailnya.

Secara default, tidak ada skema yang ditetapkan secara eksplisit dan NQRust-Identity menggunakan skema default dari database yang dipilih. Anda dapat menimpa ini dengan menggunakan opsi konfigurasi db-schema.

Juga dimungkinkan untuk mengonfigurasi database saat Mengimpor dan mengekspor realm atau Menginisialisasi dan memulihkan akun admin:

bin/kc.[sh|bat] import --help
bin/kc.[sh|bat] export --help
bin/kc.[sh|bat] bootstrap-admin --help

Untuk informasi lebih lanjut, lihat Mengonfigurasi NQRust-Identity.

Menimpa Pengaturan Koneksi Default

Server menggunakan JDBC sebagai teknologi yang mendasar untuk berkomunikasi dengan database. Jika pengaturan koneksi default tidak mencukupi, Anda dapat menentukan URL JDBC menggunakan opsi konfigurasi db-url.

Berikut adalah contoh perintah untuk database PostgreSQL.

bin/kc.[sh|bat] start --db postgres --db-url jdbc:postgresql://mypostgres/mydatabase

Perlu diperhatikan bahwa Anda perlu menghindari karakter ketika memanggil perintah yang berisi karakter shell khusus seperti ;, jadi Anda mungkin ingin menetapkan itu dalam file konfigurasi sebagai gantinya.

Mengonfigurasi dukungan Unicode untuk basis data

Dukungan Unicode untuk semua kolom tergantung pada apakah basis data mengizinkan kolom VARCHAR dan CHAR untuk menggunakan set karakter Unicode.

  • Jika kolom ini dapat diatur, Unicode kemungkinan akan berfungsi, biasanya dengan mengorbankan panjang kolom.
  • Jika basis data hanya mendukung Unicode dalam kolom NVARCHAR dan NCHAR, dukungan Unicode untuk semua kolom teks kemungkinan tidak akan berfungsi karena skema server menggunakan kolom VARCHAR dan CHAR secara luas.

Skema basis data hanya mendukung string Unicode untuk kolom khusus berikut:

  • Realms: nama tampilan, nama tampilan HTML, teks lokalisasi (kunci dan nilai)
  • Federation Providers: nama tampilan
  • Users: username, nama depan, nama belakang, nama atribut dan nilai
  • Groups: nama, nama atribut dan nilai
  • Roles: nama
  • Deskripsi objek

Selain itu, karakter terbatas pada karakter yang terkandung dalam pengkodean basis data, yang seringnya 8-bit. Namun, untuk beberapa sistem basis data, Anda dapat mengaktifkan pengkodean UTF-8 karakter Unicode dan menggunakan set karakter Unicode penuh di semua kolom teks. Untuk basis data tertentu, pilihan ini mungkin akan menghasilkan panjang string maksimum yang lebih pendek daripada panjang string maksimum yang didukung oleh pengkodean 8-bit.

Set karakter yang disarankan untuk digunakan diringkas dalam tabel di bawah ini, karena versi terbaru basis data ini sudah menggunakannya secara default.

VendorSet Karakter yang DisarankanContoh Pembuatan Basis Data
OracleAL32UTF8CREATE DATABASE keycloak<br/> CHARACTER SET AL32UTF8<br/> NATIONAL CHARACTER SET AL16UTF16;
Microsoft SQL ServerUrutan UTF-8
(yang diakhiri dengan _UTF8)
CREATE DATABASE keycloak<br/> COLLATE Latin1_General_100_CI_AS_SC_UTF8;
MySQL/MariaDButf8mb4CREATE DATABASE keycloak<br/> CHARACTER SET utf8mb4<br/> COLLATE utf8mb4_unicode_ci;
PostgreSQLUTF8CREATE DATABASE keycloak<br/> ENCODING 'UTF8'<br/> LC_COLLATE 'en_US.utf8'<br/> LC_CTYPE 'en_US.utf8';

Pertimbangan set karakter default dan urutan basis data MySQL dan MariaDB

Versi MySQL dan MariaDB yang berbeda mungkin memiliki pengaturan default yang berbeda untuk set karakter dan urutan. NQRust-Identity menggunakan set karakter default dan urutan basis data saat membuat tabel dan kolom baru. Desain ini memungkinkan Anda untuk mengelola siklus hidup data Anda sendiri dengan menentukan set karakter dan urutan yang paling sesuai dengan kebutuhan Anda.

⚠️

Sebelum migrasi NQRust-Identity ke versi baru, pastikan basis data Anda memiliki konfigurasi set karakter dan urutan yang konsisten. Pengaturan yang tidak konsisten antara tabel yang ada dapat menyebabkan kesalahan kunci asing saat migrasi.

Untuk menghindari kebisingan yang berpotensi:

  1. Atur set karakter dan urutan yang diinginkan sebagai default basis data sebelum menginstal atau mengupgrade NQRust-Identity.
  2. Pastikan semua tabel NQRust-Identity yang ada menggunakan set karakter dan urutan yang sama.
  3. Ketika mengupgrade, NQRust-Identity akan menyesuaikan tabel dan kolom baru dengan pengaturan default basis data Anda.

Dengan bergantung pada default basis data, NQRust-Identity menghormati niat Anda dan memungkinkan Anda untuk menjaga kendali atas konfigurasi basis data Anda sepanjang siklus hidupnya.

Mengonfigurasi dukungan Unicode untuk basis data Microsoft SQL Server

Karakter Unicode didukung hanya untuk kolom khusus untuk basis data Microsoft SQL Server. Basis data tidak memerlukan pengaturan khusus.

Secara default, NQRust-Identity mengatur properti JDBC driver sendStringParametersAsUnicode ke false saat menggunakan Microsoft SQL Server. Hal ini dapat meningkatkan kinerja dan efisiensi rencana kueri, karena Microsoft SQL Server mungkin tidak dapat menggunakan indeks saat parameter string dikirim sebagai Unicode.

Jika Anda perlu menimpa pengaturan ini, atur sendStringParametersAsUnicode secara eksplisit dalam URL JDBC (menggunakan db-url) atau melalui db-url-properties. Sebagai contoh:

bin/kc.[sh|bat] start --db mssql --db-url-properties=';sendStringParametersAsUnicode=true'

Waktu timeout koneksi dan masuk basis data

Ketika NQRust-Identity terhubung ke basis data, masalah jaringan dapat terjadi, terutama selama failover atau switchover. Untuk meningkatkan perilaku failover dan ketahanan startup selama masalah jaringan, NQRust-Identity mengatur waktu timeout koneksi default 10 detik untuk semua vendor basis data yang didukung saat menggunakan driver JDBC standar.

Atur waktu timeout koneksi driver JDBC dan waktu timeout masuk. Default: 10s.

Persiapan untuk PostgreSQL

Instance penulis dan pembaca

Saat menjalankan instance pembaca dan penulis PostgreSQL, NQRust-Identity perlu selalu terhubung ke instance penulis untuk melakukan pekerjaannya. Saat menggunakan driver PostgreSQL asli, NQRust-Identity mengatur properti targetServerType dari driver JDBC PostgreSQL ke primary untuk memastikan bahwa ia selalu terhubung ke instance primer yang dapat ditulisi dan tidak pernah terhubung ke instance pembaca sekunder dalam skenario failover atau switchover.

Anda dapat menimpa perilaku ini dengan mengatur nilai sendiri untuk targetServerType dalam URL DB atau properti tambahan.

Properti targetServerType hanya diterapkan secara otomatis ke sumber daya utama, karena persyaratan mungkin berbeda untuk sumber daya tambahan.

Izin pengguna database

Pastikan pengguna database memiliki izin SELECT untuk tabel berikut untuk memastikan peningkatan yang efisien: pg_class, pg_namespace.

Ini digunakan selama peningkatan NQRust-Identity untuk menentukan perkiraan jumlah baris dalam tabel. Jika NQRust-Identity tidak memiliki izin untuk mengakses tabel ini, ia akan mencatat peringatan dan melanjutkan dengan operasi yang kurang efisien SELECT COUNT(*) ... selama peningkatan untuk menentukan jumlah baris dalam tabel yang terpengaruh oleh perubahan skema.

Menyelamatkan koneksi Anda

Untuk menyelamatkan koneksi database Anda, konfigurasikan server PostgreSQL Anda untuk menggunakan TLS dan melakukan verifikasi sertifikat server penuh di sisi klien.

Konfigurasi Sisi Server (Prasyarat): Sebelum menggunakan properti di bawah, pastikan server PostgreSQL Anda dikonfigurasi untuk TLS.

Konfigurasi Sisi Klien: Selaamatkan koneksi dengan menambahkan opsi:

--db-tls-mode=verify-server --db-tls-trust-store-file=/path/to/certificate
  • db-tls-mode=verify-server: Memaksa TLS dan memverifikasi identitas server terhadap sertifikat yang dipercayai.
  • db-tls-trust-store-file=/path/to/certificate: Jalur ke file sertifikat publik server di mesin klien.

Persiapan untuk Amazon Aurora PostgreSQL

Saat menggunakan Amazon Aurora PostgreSQL, Driver JDBC Amazon Web Services (opens in a new tab) menawarkan fitur tambahan seperti transfer koneksi database saat instance penulis berubah dalam setup Multi-AZ. Driver ini bukan bagian dari distribusi dan perlu diinstal sebelum dapat digunakan.

Untuk menginstal driver ini, ikuti langkah berikut:

  1. Saat menjalankan distribusi yang tidak terkompresi: Unduh file JAR dari halaman rilis Driver JDBC Amazon Web Services (opens in a new tab) dan letakkan dalam folder providers NQRust-Identity.
  2. Saat menjalankan kontainer: Bangun gambar NQRust-Identity khusus dan tambahkan JAR di folder providers.

Sebuah Containerfile minimal untuk membangun gambar yang dapat digunakan dengan Operator NQRust-Identity terlihat seperti berikut:

FROM quay.io/keycloak/keycloak:latest
ADD --chmod=0666 https://github.com/awslabs/aws-advanced-jdbc-wrapper/releases/download/2.5.6/aws-advanced-jdbc-wrapper-2.5.6.jar /opt/keycloak/providers/aws-advanced-jdbc-wrapper.jar
  1. Konfigurasikan NQRust-Identity untuk berjalan dengan parameter berikut:

db-url Sisipkan aws-wrapper ke URL JDBC PostgreSQL reguler sehingga URL seperti jdbc:aws-wrapper:postgresql://.... db-driver Atur ke software.amazon.jdbc.Driver untuk menggunakan wrapper AWS JDBC.

Saat menimpa opsi wrapperPlugins dari Driver JDBC AWS, selalu sertakan plugin failover atau failover2 untuk memastikan bahwa NQRust-Identity selalu terhubung ke instance penulis bahkan dalam skenario failover atau switchover.

💡

Amazon Aurora PostgreSQL 17.0 atau lebih baru membutuhkan koneksi TLS secara default.

Sementara ini menyulitkan koneksi, Anda masih harus melakukan verifikasi sertifikat server penuh. Untuk melakukan ini, unduh bundle sertifikat (opens in a new tab) untuk wilayah AWS Anda.

Selamatkan koneksi dengan menambahkan opsi:

--db-tls-mode=verify-server --db-tls-trust-store-file=/path/to/certificate
  • db-tls-mode=verify-server: Memaksa TLS dan memverifikasi identitas server terhadap sertifikat yang dipercayai.
  • db-tls-trust-store-file=/path/to/certificate: Jalur ke file sertifikat publik server di mesin klien.

Persiapan untuk MySQL server

Dari MySQL 8.0.30, MySQL mendukung kunci primer tak terlihat yang dihasilkan untuk tabel InnoDB apa pun yang dibuat tanpa kunci primer yang jelas (informasi lebih lanjut di sini (opens in a new tab)). Jika fitur ini diaktifkan, inisialisasi skema database dan juga migrasi akan gagal dengan pesan kesalahan Multiple primary key defined (1068). Anda kemudian perlu menonaktifkannya dengan mengatur parameter sql_generate_invisible_primary_key ke OFF dalam konfigurasi server MySQL Anda sebelum menginstal atau meninjau NQRust-Identity.

Persiapan untuk MS SQL server

Pada MS SQL Server, level isolasi transaksi default adalah READ_COMMITTED, yang dapat mengakibatkan kemacetan saat beban tinggi. Oleh karena itu, level isolasi yang disarankan untuk NQRust-Identity adalah READ_COMMITTED_SNAPSHOT. Level isolasi ini digunakan secara default di Azure SQL.

Namun, pada MS SQL Server, level isolasi database perlu diubah dengan menjalankan perintah berikut pada database Anda:

ALTER DATABASE <your-database-name> SET READ_COMMITTED_SNAPSHOT ON;

Menggunakan Vendor Database dengan dukungan transaksi XA

NQRust-Identity menggunakan transaksi non-XA dan driver database yang sesuai secara default.

Jika Anda ingin menggunakan dukungan transaksi XA yang ditawarkan oleh driver Anda, masukkan perintah berikut:

bin/kc.[sh|bat] build --db=<vendor> --transaction-xa-enabled=true

NQRust-Identity secara otomatis memilih driver JDBC yang sesuai untuk vendor Anda.

Beberapa vendor, seperti Azure SQL dan MariaDB Galera, tidak mendukung atau mengandalkan mekanisme transaksi XA.

Pemulihan XA secara default diaktifkan dan akan menggunakan lokasi sistem file KEYCLOAK_HOME/data/transaction-logs untuk menyimpan log transaksi.

Mengaktifkan transaksi XA di lingkungan kontainer tidak sepenuhnya mendukung pemulihan XA kecuali jika penyimpanan stabil tersedia di jalur itu.

Mengonfigurasi waktu timeout transaksi

NQRust-Identity menyediakan dua opsi CLI untuk mengontrol perilaku waktu timeout transaksi:

Mengontrol waktu timeout untuk transaksi reguler. Nilai default adalah 5 menit.

Untuk mengonfigurasi timeout berbeda, misalnya 10 menit:

bin/kc.[sh|bat] start --transaction-default-timeout=10m

Mengontrol timeout untuk transaksi yang digunakan oleh perintah migrasi skema database, impor, dan ekspor. Nilai default adalah 30 menit, karena operasi ini mungkin memerlukan waktu yang lebih lama untuk diselesaikan untuk dataset yang besar.

Untuk mengonfigurasi timeout berbeda, misalnya 1 jam:

bin/kc.[sh|bat] start --transaction-setup-timeout=1h

Kedua opsi ini menerima nilai sebagai durasi ISO 8601, bilangan bulat jumlah detik, atau bilangan bulat diikuti oleh ms (milidetik), s (detik), m (menit), h (jam), atau d (hari). Opsi ini dapat dikonfigurasi melalui CLI, variabel lingkungan, atau file konfigurasi conf/keycloak.conf.

Opsi transaction-default-timeout memiliki prioritas lebih tinggi dari properti Quarkus yang tidak didukung quarkus.transaction-manager.default-transaction-timeout. Jika Anda menggunakan properti Quarkus, migrasikan ke opsi yang didukung transaction-default-timeout dan hapus properti Quarkus dari konfigurasi Anda.

Mengamankan koneksi database

Mengenkripsi lalu lintas antara NQRust-Identity dan database disarankan untuk meningkatkan keamanan, karena itu mencegah pihak ketiga dari memeriksa lalu lintas jaringan.

Direkomendasikan untuk mengambil langkah lebih jauh dan mengaktifkan verifikasi sertifikat untuk mencegah serangan yang lebih rumit seperti penodaan DNS dan hijacking alamat, di mana NQRust-Identity dapat dialihkan ke server yang berbeda dari yang dimaksud. Untuk melakukan validasi sertifikat, sertifikat database atau sertifikat Otoritas Pengawas (CA) harus ditambahkan ke truststore NQRust-Identity.

Bagian ini memberikan petunjuk tentang cara mengaktifkan pengaturan ini di NQRust-Identity dan mengonfigurasi driver JDBC dengan benar. Mengonfigurasi server database dengan kunci pribadi dan sertifikat di luar cakupan bagian ini. Mohon kunjungi dokumentasi vendor Anda tentang cara melakukannya.

NQRust-Identity menyediakan opsi CLI yang terintegrasi untuk mengonfigurasi pengaturan TLS database di berbagai vendor database. Opsi ini menyederhanakan konfigurasi dengan menyingkirkan properti JDBC spesifik vendor dan menyediakan antarmuka yang konsisten.

Opsi berikut tersedia:

Menyetel mode TLS untuk koneksi database. Nilai yang valid adalah disabled dan verify-server. Ketika diatur ke verify-server, itu mengaktifkan enkripsi dan verifikasi identitas server. Default: disabled

Jalur ke file truststore yang berisi sertifikat server database atau sertifikat Otoritas Pengawas (CA) yang digunakan untuk memverifikasi identitas server database.

Kata sandi untuk mengakses file truststore (jika diperlukan dan didukung oleh driver JDBC).

Jenis file truststore. Nilai umum meliputi JKS (Java KeyStore) dan PKCS12. Jika tidak ditentukan, jenis truststore default driver digunakan.

Opsi CLI terintegrasi ini adalah pendekatan yang disarankan untuk mengonfigurasi database TLS. NQRust-Identity secara otomatis menerjemahkan opsi ini ke properti JDBC spesifik vendor yang sesuai.

Contoh berikut menunjukkan cara mengonfigurasi database TLS menggunakan opsi ini untuk database PostgreSQL.

bin/kc.[sh|bat] start --db=postgres --db-tls-mode=verify-server --db-tls-trust-store-file=/path/to/certificate.pem

Alternatifnya, Anda dapat menggunakan --truststore-paths sebagai gantinya dari opsi db-tls-trust-store-* untuk menambahkan sertifikat Anda ke Java truststore.

bin/kc.[sh|bat] start --db=postgres --db-tls-mode=verify-server --truststore-paths=/path/to/certificate.pem

Menyetel opsi konfigurasi provider JPA untuk migrationStrategy

Untuk mengatur JPA migrationStrategy (manual/update/validate) Anda harus mengatur provider JPA sebagai berikut:

bin/kc.[sh|bat] start --spi-connections-jpa--quarkus--migration-strategy=manual

Jika Anda ingin mendapatkan file SQL untuk inisialisasi DB, Anda juga harus menambahkan SPI ini initializeEmpty (true/false):

bin/kc.[sh|bat] start --spi-connections-jpa--quarkus--initialize-empty=false

Dengan cara yang sama, migrationExport untuk menunjuk ke file dan lokasi tertentu:

bin/kc.[sh|bat] start --spi-connections-jpa--quarkus--migration-export=<path>/<file.sql>

Mengonfigurasi pool koneksi

MySQL dan MariaDB

Untuk mencegah pengecualian 'No operations allowed after connection closed' dari dilemparkan, penting untuk memastikan pool koneksi NQRust-Identity memiliki masa hidup koneksi maksimum yang kurang dari wait_timeout yang dikonfigurasi oleh server. Ketika menggunakan basis data MySQL dan MariaDB, NQRust-Identity mengonfigurasi masa hidup maksimum default 7 jam dan 50 menit, karena ini kurang dari nilai server default yaitu 8 jam.

Jika Anda secara eksplisit mengonfigurasi wait_timeout dalam basis data Anda, penting untuk memastikan Anda mengonfigurasi nilai db-pool-max-lifetime yang kurang dari wait_timeout. Praktik terbaik yang dianjurkan adalah menetapkan nilai ini sebagai wait_timeout Anda dikurangi beberapa menit. Kegagalan untuk mengonfigurasi db-pool-max-lifetime dengan benar akan menghasilkan peringatan NQRust-Identity saat startup.

Konfigurasi beberapa sumber data

NQRust-Identity memungkinkan Anda untuk menentukan sumber data tambahan jika Anda perlu mengakses database lain dari ekstensi Anda. Hal ini berguna ketika menggunakan sumber data utama NQRust-Identity bukanlah pilihan yang layak untuk menyimpan data kustom, seperti pengguna.

Mendefinisikan beberapa sumber data bekerja seperti mendefinisikan sumber data tunggal, dengan satu perubahan penting - Anda harus menentukan nama untuk setiap sumber data sebagai bagian dari nama opsi konfigurasi.

Konfigurasi yang Diperlukan

Untuk mengaktifkan sumber data tambahan, Anda perlu menyiapkan 2 hal - file JPA persistence.xml dan konfigurasi NQRust-Identity. File persistence.xml berfungsi untuk menentukan unit persistensi sebagai bagian dari standar Jakarta Persistence API dan diperlukan untuk propagasi konfigurasi yang tepat ke kerangka kerja ORM Hibernate. Setelah Anda menyelesaikan bagian dengan file persistence.xml, Anda perlu mengatur konfigurasi NQRust-Identity dengan sesuai.

Properti sumber data tambahan dapat ditentukan melalui sumber konfigurasi standar seperti CLI, keycloak.conf, atau variabel lingkungan.

Sumber data tambahan dapat dikonfigurasi dengan cara serupa seperti sumber data utama. Hal ini dicapai dengan menggunakan nama opsi konfigurasi yang analog, yang juga mencakup nama sumber data tambahan. Sebagai contoh, ketika sumber data utama menggunakan db-username, yang tambahan akan menjadi db-username-<datasource>. Lihat bab Opsi Relevan untuk daftar lengkapnya.

1. File JPA persistence.xml

File persistence.xml menyediakan konfigurasi untuk Jakarta Persistence API (JPA) seperti entitas yang harus dikelola, nama sumber data, pengaturan JDBC, pengaturan JPA/Hibernate kustom, dan lainnya. File ini perlu diletakan di folder META-INF/persistence.xml dari ekstensi NQRust-Identity kustom Anda.

Perhatikan bahwa Quarkus menyediakan kemampuan untuk mengatur unit persistensi JPA melalui properti Hibernate ORM bukannya menggunakan file persistence.xml. Namun, cara yang didukung untuk NQRust-Identity adalah menggunakan file persistence.xml, dan jika file tersebut ada, properti Quarkus diabaikan.

Di NQRust-Identity, sebagian besar konfigurasi otomatis, dan Anda hanya perlu memberikan detail konfigurasi dasar - nama sumber data dan jenis transaksi.

NQRust-Identity memerlukan penetapan jenis transaksi untuk sumber data tambahan menjadi JTA. Anda dapat menetapkan jenis transaksi dan nama sumber data sebagai berikut untuk file persistence.xml minimal ini:

<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                         xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"
                         version="3.0">
    <persistence-unit name="user-store-pu" transaction-type="JTA">
        <class>org.your.extension.UserEntity</class>
        <properties>
            <property name="jakarta.persistence.jtaDataSource" value="user-store" />
        </properties>
    </persistence-unit>
</persistence>

Untuk menetapkan nama sumber data dengan benar, Anda harus menetapkan properti jakarta.persistence.jtaDataSource. Jika tidak diatur, nama unit persistensi akan digunakan sebagai nama sumber data sebagai gantinya (jadi user-store-pu dalam hal ini). Dalam contoh di atas, nama sumber data yang dihasilkan adalah user-store. Nama sumber data dapat sama dengan nama unit persistensi.

Untuk menggunakan entitas JPA Anda sendiri, Anda perlu memberikan properti <class> yang menandai entitas JPA yang akan dikelola oleh unit persistensi ini, diarahkan ke sumber data tertentu. Dalam contoh di atas, entitas JPA org.your.extension.UserEntity akan dikelola oleh unit persistensi user-store-pu, diarahkan ke sumber data user-store.

2. Properti yang Diperlukan

Setelah Anda menyiapkan persistence.xml Anda, konfigurasi minimal di sisi NQRust-Identity adalah penyiapan jenis/db vendor untuk sumber data yang ditentukan. Anda perlu menentukan opsi build time db-kind-<name>, di mana <name> adalah nama sumber data Anda dan harus sama dengan yang ditentukan dalam file persistence.xml.

Oleh karena itu, Anda dapat mengaktifkan sumber data tambahan user-store sebagai berikut (gunakan postgres sebagai contoh):

bin/kc.[sh|bat] start --db-kind-user-store=postgres

Setelah menentukan db-kind untuk sumber data, semua default spesifik jenis database (seperti driver dan dialek) secara otomatis diterapkan, just like untuk sumber data utama.

Konfigurasi melalui variabel lingkungan

Jika Anda tidak ingin mengkonfigurasi sumber data melalui CLI atau properti keycloak.conf, Anda dapat menggunakan variabel lingkungan.

Anda dapat menetapkan jenis DB melalui variabel lingkungan (untuk sumber data user-store) sebagai berikut:

export KC_DB_KIND_USER_STORE=postgres
export KC_DB_USERNAME_USER_STORE=my-username

Ini mencocokkan dengan properti NQRust-Identity db-kind-user-store dan db-username-user-store karena pemetaan default dari _ (garis bawah) ke - (tanda das) untuk variabel lingkungan. Namun, terkadang, nama sumber data mungkin mengandung beberapa karakter khusus seperti _, $ atau .

Untuk mengkonfigurasinya dengan benar melalui variabel lingkungan NQRust-Identity, Anda perlu secara eksplisit mengatakan apa kunci untuk sumber data harus tampak seperti. Anda dapat menggunakan pasangan variabel lingkungan NQRust-Identity unik dengan kasus khusus dari KCKEY_.

Sebagai contoh, untuk sumber data dengan nama user_store$marketing, Anda dapat menetapkan variabel lingkungan sebagai berikut:

export KC_USER_STORE_DB_KIND=mariadb
export KCKEY_USER_STORE_DB_KIND=db-kind-user_store$marketing

Anda dapat menemukan informasi lebih lanjut dalam panduan Konfigurasi NQRust-Identity, dalam subbab Format untuk kunci variabel lingkungan dengan karakter khusus.

Kompatibilitas mundur untuk quarkus.properties

Dahulu, kami memberi petunjuk kepada pengguna untuk menggunakan properti Quarkus mentah untuk mengkonfigurasi sumber data tambahan di beberapa tempat. Namun, karena menggunakan properti Quarkus di file conf/quarkus.properties dianggap tidak didukung, sangat direkomendasikan untuk menggunakan opsi sumber data tambahan yang dijelaskan di atas.

Sebelum Anda dapat beralih ke opsi yang ditujukan, Anda masih dapat menentukan pengaturan sumber data melalui properti Quarkus sebagai berikut:

quarkus.datasource.user-store.db-kind=h2
quarkus.datasource.user-store.username=sa
quarkus.datasource.user-store.jdbc.url=jdbc:h2:mem:user-store;DB_CLOSE_DELAY=-1
quarkus.datasource.user-store.jdbc.transactions=xa
⚠️

Gunakan properti Quarkus tanpa tanda kutip untuk nama sumber data, karena properti dengan nama sumber data yang dipetikan bertentangan dengan pemetaan opsi sumber data baru. Oleh karena itu, gunakan quarkus.datasource.user-store.db-kind=h2, bukan quarkus.datasource."user-store".db-kind=h2 untuk mencegah masalah apa pun.

Opsi yang Relevan

OpsiTipe atau NilaiDefault
db
Penyedia database.
Dalam mode produksi, nilai default dev-file dianggap usang, Anda sebaiknya menentukan db secara eksplisit.
Kunci bernama: db-kind-<datasource>
CLI: --db
Env: KC_DB
dev-file, dev-mem, mariadb, mssql, mysql, oracle, postgres, tidbdev-file
db-connect-timeout
Mengatur waktu timeout koneksi driver JDBC dan waktu login.
Mungkin berupa nilai durasi ISO 8601, bilangan bulat detik, atau bilangan bulat diikuti salah satu [ms, h, m, s, d].
CLI: --db-connect-timeout
Env: KC_DB_CONNECT_TIMEOUT
String10s
db-debug-jpql
Menambahkan informasi JPQL sebagai komentar pada pernyataan SQL untuk debug generasi pernyataan SQL JPA.
Kunci bernama: db-debug-jpql-<datasource>
CLI: --db-debug-jpql
Env: KC_DB_DEBUG_JPQL
true, falsefalse
db-driver
Nama kelas lengkap dari driver JDBC.
Jika tidak diatur, driver default akan diatur sesuai dengan database yang dipilih.
Kunci bernama: db-driver-<datasource>
CLI: --db-driver
Env: KC_DB_DRIVER
String
db-log-slow-queries-threshold
Log pernyataan SQL yang lebih lambat dari ambang batas yang dikonfigurasi dengan logger org.
hibernate.SQL_SLOW dan log-level info.
Kunci bernama: db-log-slow-queries-threshold-<datasource>
CLI: --db-log-slow-queries-threshold
Env: KC_DB_LOG_SLOW_QUERIES_THRESHOLD
Integer10000
db-password
Sandi dari pengguna database.
Kunci bernama: db-password-<datasource>
CLI: --db-password
Env: KC_DB_PASSWORD
String
db-pool-initial-size
Ukuran awal pool koneksi.
Kunci bernama: db-pool-initial-size-<datasource>
CLI: --db-pool-initial-size
Env: KC_DB_POOL_INITIAL_SIZE
Integer
db-pool-max-lifetime
Waktu maksimum koneksi yang tetap dalam pool, setelah itu akan ditutup saat dikembalikan dan diganti sesuai kebutuhan.
Mungkin berupa nilai durasi ISO 8601, bilangan bulat detik, atau bilangan bulat diikuti salah satu [ms, h, m, s, d].
CLI: --db-pool-max-lifetime
Env: KC_DB_POOL_MAX_LIFETIME
String
db-pool-max-size
Ukuran maksimum pool koneksi.
Kunci bernama: db-pool-max-size-<datasource>
CLI: --db-pool-max-size
Env: KC_DB_POOL_MAX_SIZE
Integer100
db-pool-min-size
Ukuran minimum pool koneksi.
Kunci bernama: db-pool-min-size-<datasource>
CLI: --db-pool-min-size
Env: KC_DB_POOL_MIN_SIZE
Integer
db-schema
Skema database yang akan digunakan.
Kunci bernama: db-schema-<datasource>
CLI: --db-schema
Env: KC_DB_SCHEMA
String
db-tls-mode
Mengatur mode TLS untuk koneksi database.
Jika dinonaktifkan, menggunakan nilai default driver. Ketika diatur ke verify-server, mengaktifkan enkripsi dan verifikasi identitas server. Dibutuhkan sertifikat server database atau sertifikat Otoritas Pengguna Sertifikat (CA).
Kunci bernama: db-tls-mode-<datasource>
CLI: --db-tls-mode
Env: KC_DB_TLS_MODE
disabled, verify-serverdisabled
db-tls-trust-store-file
Jalur ke file truststore yang berisi sertifikat server database atau sertifikat Otoritas Pengguna Sertifikat (CA) yang digunakan untuk verifikasi identitas server database.
Kunci bernama: db-tls-trust-store-file-<datasource>
CLI: --db-tls-trust-store-file
Env: KC_DB_TLS_TRUST_STORE_FILE
File
db-tls-trust-store-password
Sandi untuk mengakses file truststore yang diatur dalam db-tls-trust-store-file (jika diperlukan dan didukung oleh driver JDBC).
Kunci bernama: db-tls-trust-store-password-<datasource>
CLI: --db-tls-trust-store-password
Env: KC_DB_TLS_TRUST_STORE_PASSWORD
String
db-tls-trust-store-type
Jenis file truststore.
Nilai umum meliputi JKS (Java KeyStore) dan PKCS12. Jika tidak ditentukan, menggunakan nilai default driver.
Kunci bernama: db-tls-trust-store-type-<datasource>
CLI: --db-tls-trust-store-type
Env: KC_DB_TLS_TRUST_STORE_TYPE
String
db-url
URL JDBC database yang lengkap.
Jika tidak diberikan, URL default akan diatur berdasarkan penyedia database yang dipilih. Misalnya, jika menggunakan postgres, URL JDBC default akan menjadi jdbc:postgresql://localhost/keycloak.
Kunci bernama: db-url-full-<datasource>
CLI: --db-url
Env: KC_DB_URL
String
db-url-database
Mengatur nama database dari URL JDBC default dari penyedia yang dipilih.
Jika opsi db-url diatur, opsi ini diabaikan.
Kunci bernama: db-url-database-<datasource>
CLI: --db-url-database
Env: KC_DB_URL_DATABASE
String
db-url-host
Mengatur nama host dari URL JDBC default dari penyedia yang dipilih.
Jika opsi db-url diatur, opsi ini diabaikan.
Kunci bernama: db-url-host-<datasource>
CLI: --db-url-host
Env: KC_DB_URL_HOST
String
db-url-port
Mengatur port dari URL JDBC default dari penyedia yang dipilih.
Jika opsi db-url diatur, opsi ini diabaikan.
Kunci bernama: db-url-port-<datasource>
CLI: --db-url-port
Env: KC_DB_URL_PORT
Integer
db-url-properties
Mengatur properti dari URL JDBC default dari penyedia yang dipilih.
Pastikan untuk mengatur properti sesuai dengan format yang diharapkan oleh penyedia database, serta menambahkan karakter yang tepat di awal nilai properti ini. Jika opsi db-url diatur, opsi ini diabaikan.
Kunci bernama: db-url-properties-<datasource>
CLI: --db-url-properties
Env: KC_DB_URL_PROPERTIES
String
db-username
Nama pengguna database.
Kunci bernama: db-username-<datasource>
CLI: --db-username
Env: KC_DB_USERNAME
String
transaction-default-timeout
Waktu timeout transaksi default.
Mungkin berupa nilai durasi ISO 8601, bilangan bulat detik, atau bilangan bulat diikuti salah satu [ms, h, m, s, d].
CLI: --transaction-default-timeout
Env: KC_TRANSACTION_DEFAULT_TIMEOUT
String5m
transaction-setup-timeout
Waktu timeout transaksi untuk migrasi database/impor/ekspor transaksi.
Mungkin berupa nilai durasi ISO 8601, bilangan bulat detik, atau bilangan bulat diikuti salah satu [ms, h, m, s, d].
CLI: --transaction-setup-timeout
Env: KC_TRANSACTION_SETUP_TIMEOUT
String30m
transaction-xa-enabled
Jika diatur ke true, sumber daya XA akan digunakan.
Kunci bernama: transaction-xa-enabled-<datasource>
CLI: --transaction-xa-enabled
Env: KC_TRANSACTION_XA_ENABLED
true, falsefalse

Opsi sumber daya data tambahan

OpsiTipe atau NilaiDefault
db-debug-jpql-<datasource>
Digunakan untuk <datasource> bernama.
Menambahkan informasi JPQL sebagai komentar pada pernyataan SQL untuk debug generasi pernyataan SQL JPA.
CLI: --db-debug-jpql-<datasource>
Env: KC_DB_DEBUG_JPQL_<DATASOURCE>
true, falsefalse
db-driver-<datasource>
Digunakan untuk <datasource> bernama.
Nama kelas lengkap dari driver JDBC. Jika tidak diatur, driver default akan diatur sesuai dengan database yang dipilih.
CLI: --db-driver-<datasource>
Env: KC_DB_DRIVER_<DATASOURCE>
String
db-enabled-<datasource>
Jika sumber daya data bernama <datasource> harus diaktifkan pada runtime.
CLI: --db-enabled-<datasource>
Env: KC_DB_ENABLED_<DATASOURCE>
true, falsetrue
db-kind-<datasource>
Digunakan untuk <datasource> bernama.
Penyedia database. Dalam mode produksi, nilai default dev-file dianggap usang, Anda sebaiknya menentukan db secara eksplisit.
CLI: --db-kind-<datasource>
Env: KC_DB_KIND_<DATASOURCE>
dev-file, dev-mem, mariadb, mssql, mysql, oracle, postgres, tidb
db-log-slow-queries-threshold-<datasource>
Digunakan untuk <datasource> bernama.
Log pernyataan SQL yang lebih lambat dari ambang batas yang dikonfigurasi dengan logger org.hibernate.SQL_SLOW dan log-level info.
CLI: --db-log-slow-queries-threshold-<datasource>
Env: KC_DB_LOG_SLOW_QUERIES_THRESHOLD_<DATASOURCE>
Integer10000
db-password-<datasource>
Digunakan untuk <datasource> bernama.
Sandi dari pengguna database.
CLI: --db-password-<datasource>
Env: KC_DB_PASSWORD_<DATASOURCE>
String
db-pool-initial-size-<datasource>
Digunakan untuk <datasource> bernama.
Ukuran awal pool koneksi.
CLI: --db-pool-initial-size-<datasource>
Env: KC_DB_POOL_INITIAL_SIZE_<DATASOURCE>
Integer
db-pool-max-size-<datasource>
Digunakan untuk <datasource> bernama.
Ukuran maksimum pool koneksi.
CLI: --db-pool-max-size-<datasource>
Env: KC_DB_POOL_MAX_SIZE_<DATASOURCE>
Integer100
db-pool-min-size-<datasource>
Digunakan untuk <datasource> bernama.
Ukuran minimum pool koneksi.
CLI: --db-pool-min-size-<datasource>
Env: KC_DB_POOL_MIN_SIZE_<DATASOURCE>
Integer
db-schema-<datasource>
Digunakan untuk <datasource> bernama.
Skema database yang akan digunakan.
CLI: --db-schema-<datasource>
Env: KC_DB_SCHEMA_<DATASOURCE>
String
db-tls-mode-<datasource>
Digunakan untuk <datasource> bernama.
Mengatur mode TLS untuk koneksi database. Jika dinonaktifkan, menggunakan nilai default driver. Ketika diatur ke verify-server, mengaktifkan enkripsi dan verifikasi identitas server. Dibutuhkan sertifikat server database atau sertifikat Otoritas Pengguna Sertifikat (CA).
CLI: --db-tls-mode-<datasource>
Env: KC_DB_TLS_MODE_<DATASOURCE>
disabled, verify-serverdisabled
db-tls-trust-store-file-<datasource>
Digunakan untuk <datasource> bernama.
Jalur ke file truststore yang berisi sertifikat server database atau sertifikat Otoritas Pengguna Sertifikat (CA) yang digunakan untuk verifikasi identitas server database.
CLI: --db-tls-trust-store-file-<datasource>
Env: KC_DB_TLS_TRUST_STORE_FILE_<DATASOURCE>
File
db-tls-trust-store-password-<datasource>
Digunakan untuk <datasource> bernama.
Sandi untuk mengakses file truststore yang diatur dalam db-tls-trust-store-file (jika diperlukan dan didukung oleh driver JDBC).
CLI: --db-tls-trust-store-password-<datasource>
Env: KC_DB_TLS_TRUST_STORE_PASSWORD_<DATASOURCE>
String
db-tls-trust-store-type-<datasource>
Digunakan untuk <datasource> bernama.
Jenis file truststore. Nilai umum meliputi JKS (Java KeyStore) dan PKCS12. Jika tidak ditentukan, menggunakan nilai default driver.
CLI: --db-tls-trust-store-type-<datasource>
Env: KC_DB_TLS_TRUST_STORE_TYPE_<DATASOURCE>
String
db-url-database-<datasource>
Digunakan untuk <datasource> bernama.
Mengatur nama database dari URL JDBC default dari penyedia yang dipilih. Jika opsi db-url diatur, opsi ini diabaikan.
CLI: --db-url-database-<datasource>
Env: KC_DB_URL_DATABASE_<DATASOURCE>
String
db-url-full-<datasource>
Digunakan untuk <datasource> bernama.
URL JDBC database yang lengkap. Jika tidak diberikan, URL default akan diatur berdasarkan penyedia database yang dipilih. Misalnya, jika menggunakan postgres, URL JDBC default akan menjadi jdbc:postgresql://localhost/keycloak.
CLI: --db-url-full-<datasource>
Env: KC_DB_URL_FULL_<DATASOURCE>
String
db-url-host-<datasource>
Digunakan untuk <datasource> bernama.
Mengatur nama host dari URL JDBC default dari penyedia yang dipilih. Jika opsi db-url diatur, opsi ini diabaikan.
CLI: --db-url-host-<datasource>
Env: KC_DB_URL_HOST_<DATASOURCE>
String
db-url-port-<datasource>
Digunakan untuk <datasource> bernama.
Mengatur port dari URL JDBC default dari penyedia yang dipilih. Jika opsi db-url diatur, opsi ini diabaikan.
CLI: --db-url-port-<datasource>
Env: KC_DB_URL_PORT_<DATASOURCE>
Integer
db-url-properties-<datasource>
Digunakan untuk <datasource> bernama.
Mengatur properti dari URL JDBC default dari penyedia yang dipilih. Pastikan untuk mengatur properti sesuai dengan format yang diharapkan oleh penyedia database, serta menambahkan karakter yang tepat di awal nilai properti ini. Jika opsi db-url diatur, opsi ini diabaikan.
CLI: --db-url-properties-<datasource>
Env: KC_DB_URL_PROPERTIES_<DATASOURCE>
String
db-username-<datasource>
Digunakan untuk <datasource> bernama.
Nama pengguna database.
CLI: --db-username-<datasource>
Env: KC_DB_USERNAME_<DATASOURCE>
String
transaction-xa-enabled-<datasource>
Jika diatur ke true, XA untuk <datasource> sumber daya akan digunakan.
CLI: --transaction-xa-enabled-<datasource>
Env: KC_TRANSACTION_XA_ENABLED_<DATASOURCE>
true, falsetrue