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.
| Database | Nilai Opsi | Versi Teruji | Versi Didukung |
|---|---|---|---|
| MariaDB Server | mariadb | 11.8 | 11.8 (LTS), 11.4 (LTS), 10.11 (LTS), 10.6 (LTS) |
| Microsoft SQL Server | mssql | 2022 | 2022, 2019 |
| MySQL | mysql | 8.4 | 8.4 (LTS), 8.0 (LTS) |
| Oracle Database | oracle | 23.5 | 23.x (mis. 23.5+), 19c (19.3+) (Catatan: Oracle RAC juga didukung jika menggunakan versi mesin database yang sama, mis. 23.5+, 19.3+) |
| PostgreSQL | postgres | 18 | 18.x, 17.x, 16.x, 15.x, 14.x |
| EnterpriseDB Advanced | postgres | 18 | 18.x, 17.x |
| Amazon Aurora PostgreSQL | postgres | 17.5 | 17.x, 16.x, 15.x |
| Azure SQL Database | mssql | terkini | terkini |
| Azure SQL Managed Instance | mssql | terkini | terkini |
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:
-
Unduh file JAR
ojdbc17danorai18ndari salah satu sumber berikut: -
Zipped JDBC driver and Companion Jars versi 23.26.0.0.0 dari halaman unduh driver Oracle (opens in a new tab).
-
Maven Central melalui
ojdbc17danorai18n. -
Media install yang direkomendasikan oleh vendor database untuk database tertentu yang digunakan.
-
Ketika menjalankan distribusi yang tidak diungkapkan: Letakkan file JAR
ojdbc17danorai18ndi folderprovidersNQRust-Identity -
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 buildKemudian 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:
- Menggunakan perintah
builddiikuti dengan perintahstartyang 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-postgresKemudian, 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- Menggunakan hanya perintah
start(tanpa--optimized)
bin/kc.[sh|bat] start --db postgres --db-url-host keycloak-postgres --db-username keycloak --db-password change_meContoh 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 --helpUntuk 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/mydatabasePerlu 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.
| Vendor | Set Karakter yang Disarankan | Contoh Pembuatan Basis Data |
|---|---|---|
| Oracle | AL32UTF8 | CREATE DATABASE keycloak<br/> CHARACTER SET AL32UTF8<br/> NATIONAL CHARACTER SET AL16UTF16; |
| Microsoft SQL Server | Urutan UTF-8 (yang diakhiri dengan _UTF8) | CREATE DATABASE keycloak<br/> COLLATE Latin1_General_100_CI_AS_SC_UTF8; |
| MySQL/MariaDB | utf8mb4 | CREATE DATABASE keycloak<br/> CHARACTER SET utf8mb4<br/> COLLATE utf8mb4_unicode_ci; |
| PostgreSQL | UTF8 | CREATE 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:
- Atur set karakter dan urutan yang diinginkan sebagai default basis data sebelum menginstal atau mengupgrade NQRust-Identity.
- Pastikan semua tabel NQRust-Identity yang ada menggunakan set karakter dan urutan yang sama.
- 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/certificatedb-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:
- 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
providersNQRust-Identity. - 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- 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/certificatedb-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=trueNQRust-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=10mMengontrol 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=1hKedua 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.pemAlternatifnya, 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.pemMenyetel 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=manualJika 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=falseDengan 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=postgresSetelah 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-usernameIni 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$marketingAnda 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=xaGunakan 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
| Opsi | Tipe atau Nilai | Default |
|---|---|---|
dbPenyedia database. Dalam mode produksi, nilai default dev-file dianggap usang, Anda sebaiknya menentukan db secara eksplisit.Kunci bernama: db-kind-<datasource>CLI: --dbEnv: KC_DB | dev-file, dev-mem, mariadb, mssql, mysql, oracle, postgres, tidb | dev-file |
db-connect-timeoutMengatur 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-timeoutEnv: KC_DB_CONNECT_TIMEOUT | String | 10s |
db-debug-jpqlMenambahkan informasi JPQL sebagai komentar pada pernyataan SQL untuk debug generasi pernyataan SQL JPA. Kunci bernama: db-debug-jpql-<datasource>CLI: --db-debug-jpqlEnv: KC_DB_DEBUG_JPQL | true, false | false |
db-driverNama kelas lengkap dari driver JDBC. Jika tidak diatur, driver default akan diatur sesuai dengan database yang dipilih. Kunci bernama: db-driver-<datasource>CLI: --db-driverEnv: KC_DB_DRIVER | String | |
db-log-slow-queries-thresholdLog 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-thresholdEnv: KC_DB_LOG_SLOW_QUERIES_THRESHOLD | Integer | 10000 |
db-passwordSandi dari pengguna database. Kunci bernama: db-password-<datasource>CLI: --db-passwordEnv: KC_DB_PASSWORD | String | |
db-pool-initial-sizeUkuran awal pool koneksi. Kunci bernama: db-pool-initial-size-<datasource>CLI: --db-pool-initial-sizeEnv: KC_DB_POOL_INITIAL_SIZE | Integer | |
db-pool-max-lifetimeWaktu 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-lifetimeEnv: KC_DB_POOL_MAX_LIFETIME | String | |
db-pool-max-sizeUkuran maksimum pool koneksi. Kunci bernama: db-pool-max-size-<datasource>CLI: --db-pool-max-sizeEnv: KC_DB_POOL_MAX_SIZE | Integer | 100 |
db-pool-min-sizeUkuran minimum pool koneksi. Kunci bernama: db-pool-min-size-<datasource>CLI: --db-pool-min-sizeEnv: KC_DB_POOL_MIN_SIZE | Integer | |
db-schemaSkema database yang akan digunakan. Kunci bernama: db-schema-<datasource>CLI: --db-schemaEnv: KC_DB_SCHEMA | String | |
db-tls-modeMengatur 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-modeEnv: KC_DB_TLS_MODE | disabled, verify-server | disabled |
db-tls-trust-store-fileJalur 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-fileEnv: KC_DB_TLS_TRUST_STORE_FILE | File | |
db-tls-trust-store-passwordSandi 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-passwordEnv: KC_DB_TLS_TRUST_STORE_PASSWORD | String | |
db-tls-trust-store-typeJenis 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-typeEnv: KC_DB_TLS_TRUST_STORE_TYPE | String | |
db-urlURL 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-urlEnv: KC_DB_URL | String | |
db-url-databaseMengatur 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-databaseEnv: KC_DB_URL_DATABASE | String | |
db-url-hostMengatur 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-hostEnv: KC_DB_URL_HOST | String | |
db-url-portMengatur 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-portEnv: KC_DB_URL_PORT | Integer | |
db-url-propertiesMengatur 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-propertiesEnv: KC_DB_URL_PROPERTIES | String | |
db-usernameNama pengguna database. Kunci bernama: db-username-<datasource>CLI: --db-usernameEnv: KC_DB_USERNAME | String | |
transaction-default-timeoutWaktu 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-timeoutEnv: KC_TRANSACTION_DEFAULT_TIMEOUT | String | 5m |
transaction-setup-timeoutWaktu 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-timeoutEnv: KC_TRANSACTION_SETUP_TIMEOUT | String | 30m |
transaction-xa-enabledJika diatur ke true, sumber daya XA akan digunakan. Kunci bernama: transaction-xa-enabled-<datasource>CLI: --transaction-xa-enabledEnv: KC_TRANSACTION_XA_ENABLED | true, false | false |
Opsi sumber daya data tambahan
| Opsi | Tipe atau Nilai | Default |
|---|---|---|
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, false | false |
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, false | true |
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> | Integer | 10000 |
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> | Integer | 100 |
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-server | disabled |
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, false | true |