Централизованная аутентификация и авторизация пользователей
Введение
Для организации централизованной аутентификации и авторизации пользователей в ОС МСВСфера используется приложение Keycloak.
Ключевые функции Keycloak:
Единый вход (Single Sign-On — SSO)
Пользователи входят в систему один раз и получают доступ ко всем подключенным приложениям, не вводя логин и пароль для каждого из них. То есть приложения не должны реализовывать формы входа, проверять пользователей и хранить их данные. После входа в Keycloak пользователи могут переключаться между приложениями без повторной авторизации. Keycloak также обеспечивает единый выход (single sign-out), то есть пользователь выходит из всех приложений, использующих Keycloak, всего одним действием.
Аутентификация и авторизация
Обрабатывает входы пользователей, проверяет их подлинность и выдаёт токены для доступа к защищённым ресурсам.
Управление пользователями и ролями
Централизованно создает, управляет пользователями, их ролями и группами, определяя их права доступа к приложениям и данным. Если role-based модели авторизации недостаточно, Keycloak предоставляет возможность более тонкой настройки прав доступа, позволяющей управлять разрешениями для всех сервисов из административной консоли и задавать более специализированные политики безопасности.
Федерация пользователей
Keycloak имеет встроенную поддержку подключения к существующим серверам LDAP и Active Directory. Вы также можете создать собственный провайдер, если у вас пользователи хранятся в других системах, например, в реляционных базах данных.
Поддержка стандартных протоколов
Реализует стандарты аутентификации, такие как OpenID Connect, OAuth 2.0 и SAML.
Вход через социальные сети
Позволяет пользователям входить в систему, используя свои учётные записи в социальных сетях.
Гибкая интеграция
Благодаря REST API и поддержке различных фреймворков, Keycloak легко интегрируется с любыми фронтенд- и бэкенд-системами.
Административная панель управления
Предоставляет администраторам возможность централизованного управления всеми аспектами сервера Keycloak. Администратор может включать и отключать различные функции, настраивать провайдеров удостоверений и федерацию пользователей. Также есть возможность создавать и управлять приложениями и сервисами и задавать детализированные политики авторизации. Администраторы управляют пользователями, включая права доступа и сессии.
Панель управления аккаунтом
Через панель управления аккаунтом пользователи могут самостоятельно настраивать свои учётные записи, изменять профиль, менять пароль и настраивать двухфакторную аутентификацию. Пользователи могут управлять своими сессиями и просматривать историю действий. Если включён вход через социальные сети или федерацию пользователей, пользователи могут привязывать аккаунты различных провайдеров, позволяя входить в один и тот же аккаунт через разные идентификаторы.
Установка
Перед началом работы с Keycloak на физическом или виртуальном сервере убедитесь, что ваше устройство имеет достаточный объём памяти и процессорных ресурсов для использования Keycloak.
Установка Keycloak
Для установки Keycloak из репозиториев ОС МСВСфера выполните следующую команду:
$ sudo dnf install keycloak
Запуск Keycloak
Для запуска Keycloak выполните следующую команду:
$ sudo /usr/lib/keycloak/bin/kc.sh start-dev
Опция start-dev запускает Keycloak в режиме разработки.
В этом режиме вы можете быстро познакомиться с Keycloak и запустить его с настройками по умолчанию,
удобными для разработчиков, например, для создания новой темы Keycloak.
Начало работы в Keycloak
Создание администратора
По умолчанию в Keycloak нет пользователя с правами администратора. Перед запуском нужно создать такого пользователя.
Откройте адрес
http://localhost:8080/.Заполните форму, указав желаемое имя пользователя и пароль.
Вход в панель управления администратора
Перейдите в панель управления администратора Keycloak по адресу
http://localhost:8080/admin.Войдите, используя ранее созданные имя пользователя и пароль.
Создание областей
В Keycloak область (realm) позволяет администратору создавать изолированные группы приложений и пользователей.
В системе уже есть одна область с названием master, которая предназначена только для администрирования Keycloak, но не для управления приложениями.
Для создания первой области, выполните следующие шаги:
Создание пользователя
По умолчанию в области нет пользователей. Для создания пользователя выполните следующие шаги:
Убедитесь, что вы находитесь в нужной области (имя области отображаемом рядом с Current realm. В нашем примере это myrealm).
В левом меню выберите Users.
Нажмите Create new user.
Заполните форму, указав следующие данные:
Username: имя пользователя, например,
myuser;First name: имя пользователя;
Last name: фамилия пользователя;
Нажмите Create.
Чтобы пользователь мог войти в систему, ему необходимо установить пароль. Для установки пароля выполните следующие действия:
Перейдите на вкладку Credentials вверху страницы.
В форме Set password введите желаемый пароль.
Чтобы пароль не нужно было менять при первом входе, переведите слайдер Temporary в положение Off.
Вход в панель управления аккаунтом (Account Console)
Теперь вы можете войти в панель управления аккаунтом, чтобы проверить корректность настройки пользователя.
Откройте
http://localhost:8080/realms/myrealm/account.Войдите под своим пользователем (в нашем примере это
myuser) и паролем, который вы задали ранее.
В панели управления аккаунтом пользователь может управлять своей учётной записью: менять профиль, настраивать двухфакторную аутентификацию, подключать аккаунты сторонних провайдеров идентификации.
Защита первого приложения
Для защиты первого приложения сначала зарегистрируйте его в Keycloak:
Откройте
http://localhost:8080/admin.Убедитесь, что в поле Current realm выбрана ваша область (в нашем примере это
myrealm).Перейдите в раздел Clients.
Нажмите Create client.
Заполните форму:
Нажмите Next.
Проверьте, что Standard flow включён.
Нажмите Next.
В разделе Login settings выполните следующие настройки:
В поле Valid redirect URIs введите
https://www.keycloak.org/app/*.В поле Web origins введите
https://www.keycloak.org.
Нажмите Save.
Чтобы убедиться, что клиент успешно создан, можно воспользоваться тестовым SPA-приложением на сайте Keycloak:
Перейдите по адресу https://www.keycloak.org/app/.
Нажмите Save для использования настроек по умолчанию.
Нажмите Sign in и авторизуйтесь в приложении через запущенный ранее сервер Keycloak.
Конфигурация Keycloak
Keycloak загружает настройки из четырёх источников, перечисленных здесь в порядке приоритета применения.
Параметры командной строки.
Переменные окружения.
Параметры, определённые в файле
/usr/lib/keycloak/conf/keycloak.confили в пользовательском конфигурационном файле.Конфиденциальные параметры, определённые в пользовательском файле Java KeyStore.
Если параметр задан в нескольких источниках, приоритет имеет тот источник, который стоит выше в списке. Например, значение, заданное в командной строке, будет иметь больший приоритет, чем переменная окружения для того же параметра.
Пример: настройка параметра db-url-host
Источник |
Формат |
|---|---|
Параметры командной строки |
|
Переменная окружения |
|
Конфигурационный файл |
|
Файл Java KeyStore |
|
Поскольку приоритет выше у командной строки, при запуске будет использовано значение cliValue.
Если параметр командной строки не задан, то будет использовано значение из переменной окружения envVarValue.
Если и там нет значения, берётся конфигурация из файла, и наконец из файла KeyStore, который имеет самый низкий приоритет.
Форматы конфигурации
В конфигурации используется единый для каждого источника формат, что упрощает конвертацию ключ/значение между источниками. Обратите внимание, что такие форматы применимы и к параметрам spi.
Форматы для каждого источника:
Параметры командной строки:
--<ключ-с-дефисами>=<значение>. Для некоторых параметров существует сокращённая запись-<аббревиатура>=<значение>.Переменные окружения:
KC_<ключ_с_подчёркиваниями>=<значение>, где ключ — в верхнем регистре.Конфигурационный файл:
<ключ-с-дефисами>=<значение>Java KeyStore:
kc.<ключ-с-дефисами>, где<значение>— это пароль, хранящийся в KeyStore.
Форматы параметров командной строки
Keycloak поддерживает множество параметров командной строки для настройки. Чтобы посмотреть их список, выполните команду:
$ sudo /usr/lib/keycloak/bin/kc.sh start --help
Формат использования переменных окружения в файле конфигурации
В файле keycloak.conf можно использовать подстановки значений из переменных окружения, используя синтаксис ${ENV_VAR}:
db-url-host=${MY_DB_HOST}
Если переменная окружения не определена, можно указать значение по умолчанию через двоеточие ::
db-url-host=${MY_DB_HOST:mydb}
Формат указания конкретного файла конфигурации
По умолчанию сервер читает настройки из /usr/lib/keycloak/conf/keycloak.conf.
Для новой установки в этом файле только закомментированные параметры с подсказками.
Чтобы использовать другой файл, укажите его через опцию --config-file:
$ sudo /usr/lib/keycloak/bin/kc.sh --config-file=/path/to/config.conf start
Настройка конфиденциальных параметров через Java KeyStore
С помощью KeyStore Configuration Source можно загружать параметры напрямую из Java KeyStore файла, используя опции:
--config-keystore— путь к файлу KeyStore.--config-keystore-password— пароль от KeyStore.--config-keystore-type— тип KeyStore (по умолчаниюPKCS12).
Пароли в KeyStore должны иметь алгоритм шифрования с паролем (PBE), где ключ выводится из пароля KeyStore.
Создать такой KeyStore можно с помощью команды keytool:
keytool -importpass -alias kc.db-password -keystore keystore.p12 -storepass keystorepass -storetype PKCS12 -v
Пароль — это значение для свойства kc.db-password.
Запустите сервер со следующими параметрами:
sudo /usr/lib/keycloak/bin/kc.sh start --config-keystore=/путь/к/keystore.p12 --config-keystore-password=keystorepass --config-keystore-type=PKCS12
Формат для встроенных параметров Quarkus
Обычно, параметров Keycloak достаточно для настройки сервера, но если нужен дополнительный функционал, не предусмотренный в Keycloak, можно использовать параметры из фреймворка Quarkus.
Использование таких параметров не рекомендуется, так как они не поддерживаются Keycloak напрямую.
Для использования параметров Quarkus:
Создайте файл
quarkus.propertiesв папкеconf.Определите нужные параметры в этом файле.
Можно установить только подмножество параметров, доступных в Quarkus (Документация Quarkus).
Обратите внимание:
Значок замка в документации Quarkus означает параметр, применяемый на этапе сборки (build time).
Отсутствие замка — runtime-свойство, применяемое во время работы.
Некоторые параметры Quarkus, например quarkus.http.port, уже используются в Keycloak и переопределяются настройками Keycloak.
Использование спецсимволов в значениях
Keycloak и Quarkus поддерживают выражения вида ${ключ} для подстановки значений.
Чтобы отключить интерпретацию выражения, используйте символ \.
Особенно это касается символа $, который надо экранировать при необходимости.
Например, для значения my$$password укажите my\$\$password.
Обратите внимание, что \ нужно экранировать или использовать кавычки. Например:
bash с одинарными кавычками:
--db-password='my\$\$password'bash с двойными кавычками:
--db-password="my\\$\\$password"В файлах свойств:
kc.db-password=my\\$\\$password
Форматы ключей переменных окружения с особыми символами
Неалфавитно-цифровые символы в ключах замещаются на _ в переменных окружения.
При трансформации обратно из переменной в ключ параметра _ заменяется на -,
кроме случаев для логирования, где _ заменяется на . (классы и пакеты содержат точки).
Предупреждение
Автоматическая конвертация может нарушать ожидаемый ключ.
Например, kc.log-level-package.class_name становится переменной KC_LOG_LEVEL_PACKAGE_CLASS_NAME,
которая при обратном преобразовании превращается в kc.log-level-package.class.name, что может не совпадать с ожидаемым ключом.
Варианты решения:
Создайте запись в
keycloak.confсо ссылкой на переменную окружения, например:kc.log-level-package.class_name=${CLASS_NAME_LEVEL}Или используйте пару переменных окружения:
KC_UNIQUEIFIER=значениеиKCKEY_UNIQUEIFIER=ключНапример:KC_MYKEY=debugиKCKEY_MYKEY=log-level-package.class_name
Запуск Keycloak
Keycloak можно запускать в режиме разработки (development) и в режиме эксплуатации (production). Каждый режим устанавливает разные настройки по умолчанию исходя из целей.
Запуск Keycloak в режиме разработки (development)
Режим разработки подходит для быстрого знакомства с Keycloak или при работе над темой.
Запуск:
$ sudo /usr/lib/keycloak/bin/kc.sh start-dev
Настройки по умолчанию в режиме разработки:
HTTP включён:
Строгая проверка имени хоста отключена;
Используется локальный кэш (не распределённый);
Кэширование тем и шаблонов отключено.
Запуск Keycloak в режиме эксплуатации (production)
Режим эксплуатации используется для развертывания в рабочих средах с принципом безопасности по умолчанию.
Запуск:
$ sudo /usr/lib/keycloak/bin/kc.sh start
Без дополнительной настройки команда выдаст ошибку — это сделано специально, чтобы предотвратить запуск без обязательной настройки имени хоста и HTTPS/TLS.
Настройки по умолчанию в режиме эксплуатации:
HTTP отключён (необходим HTTPS);
Ожидается конфигурация имени хоста;
Ожидается настройка HTTPS/TLS.
В файле /usr/lib/keycloak/conf/keycloak.conf по умолчанию содержатся закомментированные примеры
параметров для запуска системы, готовой к эксплуатации (production-ready).
Создание начального пользователя-администратора
Начального администратора можно создать через веб-интерфейс при подключении с локального адреса (localhost), либо задать через переменные окружения:
KC_BOOTSTRAP_ADMIN_USERNAME=<имя_администратора>;KC_BOOTSTRAP_ADMIN_PASSWORD=<пароль_администратора>.
Keycloak при первом запуске создаст такого пользователя.
Если администратор уже существует, а переменные окружения заданы, при запуске появится сообщение об ошибке создания, но сервер запустится.
Дополнительных пользователей можно создавать в панели управления администратора или
с помощью утилиты командной строки /usr/lib/keycloak/bin/kcadm.sh (запуск через sudo).
Использование системных переменных в конфигурации областей (realms)
Администраторы областей могут ссылаться на системные переменные (переменные окружения и свойства системы) в настройках областей и его компонентов.
По умолчанию использование системных переменных запрещено, за исключением тех, что явно разрешены через параметр конфигурации:
spi-admin--allowed-system-variables
Этот параметр принимает перечень ключей через запятую, которые можно подставлять из системных переменных.
Пример запуска с разрешением переменных FOO и BAR:
$ sudo /usr/lib/keycloak/bin/kc.sh start --spi-admin--allowed-system-variables=FOO,BAR
Настройка TLS
Необходимо настроить HTTPS-сертификаты Keycloak для входящих и исходящих запросов.
Transport Layer Security (TLS) — это важный протокол, обеспечивающий обмен данными по защищённому каналу. Для рабочих сред никогда не используйте HTTP для доступа к Keycloak, он обрабатывает конфиденциальные данные при взаимодействии с другими приложениями.
Keycloak можно настроить для загрузки сертификатов и ключей из файлов в формате PEM или из Java Keystore. Если заданы оба варианта, приоритет отдаётся PEM-файлам.
Предоставление сертификатов в формате PEM
Если у вас есть пара соответствующих файлов сертификата и приватного ключа в формате PEM, настройте Keycloak для их использования, запустив следующую команду:
$ sudo /usr/lib/keycloak/bin/kc.sh start --https-certificate-file=/path/to/certificate.pem --https-certificate-key-file=/path/to/key.pem
Keycloak создаст из этих файлов хранилище ключей в памяти и будет использовать его.
Предоставление Keystore
Если файл хранилища ключей не настроен явно, но параметр http-enabled выключен, Keycloak ищет файл /usr/lib/keycloak/conf/server.keystore.
Также можно использовать существующее хранилище ключей, запустив команду:
/usr/lib/keycloak/bin/kc.sh start --https-key-store-file=/path/to/existing-keystore
Поддерживаемые расширения файлов хранилища ключей:
.p12,.pkcs12,.pfx— файлы в формате pkcs12..jks,.keystore— файлы в формате JKS..key,.crt,.pem— файлы в формате PEM.
Если ваше хранилище не имеет расширения, соответствующего типу файла, необходимо дополнительно указать опцию https-key-store-type.
Установка пароля для Keystore
Вы можете задать надёжный пароль для хранилища при помощи опции https-key-store-password:
$ sudo /usr/lib/keycloak/bin/kc.sh start --https-key-store-password=<password>
Если пароль не указан, будет использоваться пароль по умолчанию — password.
Защита учётных данных
Во избежание указания пароля в открытом виде в командной строке или в файле /usr/lib/keycloak/conf/keycloak.conf
рекомендуется применять лучшие практики безопасности: использовать хранилища (vault) или примонтированные секреты.
Перезагрузка сертификатов и ключей
По умолчанию Keycloak перезагружает сертификаты, ключи и хранилища, указанные в опциях https-*, каждый час.
Это полезно в средах с частой ротацией ключей, и позволяет обновлять их без перезапуска сервера.
Вы можете изменить интервал перезагрузки с помощью опции https-certificates-reload-period.
Значение может быть указано как java.time.Duration, целое число секунд или число с суффиксом времени [ms, h, m, s, d].
Интервал должен быть больше 30 секунд. Значение -1 отключит перезагрузку.
Настройка доверенных сертификатов
Настройте хранилище доверенных сертификатов (Truststore) Keycloak для работы через TLS.
Когда Keycloak взаимодействует с внешними сервисами или принимает входящие соединения по TLS, он должен проверять удалённый сертификат, чтобы убедиться, что соединяется с доверенным сервером. Это необходимо для предотвращения атак типа «man-in-the-middle» («человек посередине»).
Сертификаты клиентов или серверов, а также сертификаты центра сертификации (CA), выдавшего эти сертификаты, должны быть добавлены в хранилище доверенных сертификатов. Это хранилище затем нужно настроить для использования Keycloak.
Настройка системного хранилища доверенных сертификатов
Сертификаты, включённые в стандартное системное хранилище сертификатов Java, всегда считаются доверенными.
Если вам нужны дополнительные сертификаты — что актуально, например, при использовании самоподписанных сертификатов
или внутренних центров сертификации, не распознаваемых JRE, — их можно положить в директорию conf/truststores или её поддиректории.
Сертификаты могут быть в формате PEM или в файлах PKCS12 с расширениями .p12, .pfx или .pkcs12. Если используется PKCS12,
сертификаты должны быть без шифрования, то есть без пароля.
Если необходим альтернативный путь, воспользуйтесь опцией --truststore-paths,
чтобы указать дополнительные файлы или директории с PEM- или PKCS12-файлами.
Пути указываются относительно директории запуска Keycloak,
поэтому рекомендуется использовать абсолютные пути.
Если указан каталог, он будет просканирован рекурсивно на предмет файлов сертификатов.
После добавления всех нужных сертификатов, хранилище будет использоваться
в качестве системного по умолчанию через свойства javax.net.ssl,
а также по умолчанию внутри самого Keycloak.
Пример запуска:
$ sudo /usr/lib/keycloak/bin/kc.sh start --truststore-paths=/opt/truststore/myTrustStore.pfx,/opt/other-truststore/myOtherTrustStore.pem
Также можно напрямую задать собственные системные свойства javax.net.ssl для хранилища, но рекомендуется использовать именно --truststore-paths.
Политика проверки имени хоста
Вы можете уточнить, как осуществляется проверка имени хоста при TLS-соединениях, с помощью свойства tls-hostname-verifier.
DEFAULT(значение по умолчанию) разрешает использовать подстановочные символы (wildcards) в поддоменах (например,\*.foo.com), которые соответствуют именам с таким же числом уровней (например,a.foo.com, но неa.b.foo.com). При этом применяются правила и исключения для публичных суффиксов на основе https://publicsuffix.org/list/.ANY— имя хоста не проверяется. Этот режим нельзя использовать в рабочей среде.WILDCARD(устаревший) разрешает подстановочные символы в поддоменах (например,\*.foo.com) и может сопоставлять имена с любым количеством уровней (например,a.b.foo.com). Рекомендуется использовать вместо негоDEFAULT.STRICT(устаревший) разрешает подстановочные символы в поддоменах (например,\*.foo.com) и сопоставляет имена с таким же числом уровней (например,a.foo.com, но неa.b.foo.com) с некоторыми ограничениями. Используйте вместо негоDEFAULT.
Обратите внимание, что это свойство не применяется к защищённым LDAP-соединениям, которые требуют строгой проверки имени хоста.
Настройка базы данных
Настройте реляционную базу данных для Keycloak для хранения данных пользователей, клиентов и областей.
В этом руководстве объясняется, как настроить сервер Keycloak для хранения данных в реляционной базе данных.
Поддерживаемые базы данных
Сервер поддерживает различные базы данных без дополнительной настройки.
Вы можете узнать доступные базы данных, просмотрев ожидаемые значения для параметра конфигурации db.
В таблице перечислены поддерживаемые базы данных и протестированные версии.
База данных |
Значение параметра |
Протестированная версия |
|---|---|---|
MariaDB Server |
|
11.4 |
Microsoft SQL Server |
|
2022 |
MySQL |
|
8.4 |
Oracle Database |
|
23.5 |
PostgreSQL |
|
17 |
Amazon Aurora PostgreSQL |
|
16.8 |
По умолчанию сервер использует базу данных dev-file.
Это база данных по умолчанию, которую сервер использует
для сохранения данных и которая существует только для разработки.
База данных dev-file не подходит для использования в рабочей среде, и перед развёртыванием её необходимо заменить.
Настройка базы данных
Для каждой поддерживаемой базы данных сервер предлагает рекомендуемые значения по умолчанию для упрощения настройки. Вам нужно лишь указать основные параметры, например, хост базы данных и учётные данные.
Конфигурацию можно задать как при выполнении команды build, так и при запуске сервера (start):
Использование команды
build, а затем оптимизированногоstart(рекомендуется).Сначала укажите минимальные параметры подключения к базе в файле
/usr/lib/keycloak/conf/keycloak.conf:# Поставщик базы данных. db=postgres # Имя пользователя базы данных. db-username=keycloak # Пароль пользователя базы данных. db-password=change_me # Хост JDBC URL выбранного поставщика db-url-host=keycloak-postgres
Затем выполните команды для сборки нового оптимизированного образа сервера и его запуска:
$ sudo /usr/lib/keycloak/bin/kc.sh build $ sudo /usr/lib/keycloak/bin/kc.sh start --optimized
Использование только команды
start(без--optimized):/var/lib/keycloak/bin/kc.sh start --db postgres --db-url-host keycloak-postgres --db-username keycloak --db-password change_me
Примечание
Примеры выше показывают минимальные параметры для подключения, но здесь раскрыт пароль базы, что нежелательно.
Лучше использовать файл /var/lib/keycloak/conf/keycloak.conf, переменные окружения или keystore для хранения пароля.
По умолчанию используется схема keycloak, но вы можете изменить её с помощью параметра конфигурации db-schema.
/var/lib/keycloak/bin/kc.sh import --help
/var/lib/keycloak/bin/kc.sh export --help
/var/lib/keycloak/bin/kc.sh bootstrap-admin --help
Переопределение стандартных настроек подключения
Сервер использует JDBC для работы с базой данных. Если стандартных настроек недостаточно, можно указать полный JDBC URL через опцию db-url.
Пример команды для PostgreSQL:
/var/lib/keycloak/bin/kc.sh start --db postgres --db-url jdbc:postgresql://mypostgres/mydatabase
Обратите внимание, что в командной строке нужно экранировать специальные символы, например ;.
Чтобы избежать этого, лучше указать URL в конфигурационном файле.
Настройка поддержки Unicode в базе данных
Поддержка Unicode зависит от того, разрешает ли база данных использовать Unicode в полях VARCHAR и CHAR.
Если это возможно, Unicode обычно поддерживается, но при этом может снижаться максимальная длина поля.
Если поддерживается только Unicode в NVARCHAR и NCHAR, то все текстовые поля, построенные на VARCHAR и CHAR, скорее всего, не смогут правильно хранить все Unicode символы.
Схема базы предоставляет полную поддержку Unicode только для специальных полей:
Области (Realms): отображаемое имя, HTML-имя, локализации (ключи и значения);
Поставщики федерации (Federation Providers): отображаемое имя;
Пользователи (Users): имя пользователя, имя, фамилия, названия и значения атрибутов;
Группы (Groups): название, названия и значения атрибутов;
Роли (Roles): название;
Описания объектов.
Во всех остальных полях символы ограничены набором кодировки базы, который часто 8-битный. В некоторых СУБД можно включить кодировку UTF-8 для полноценной поддержки Unicode в любых текстовых полях. Учтите, что при этом максимальная длина строк может уменьшиться по сравнению с 8-битным режимом.
Настройка Unicode в MySQL
MySQL поддерживает Unicode в VARCHAR и CHAR, если база создана с соответствующей кодировкой.
Следует использовать команду CREATE DATABASE с кодировкой, например:
CREATE DATABASE mydb CHARACTER SET utf8;
Обратите внимание, что utf8mb4 не поддерживается по причине иной организации хранения.
При использовании utf8 ограничения по длине зависят от количества символов, а не байт.
Если база не поддерживает Unicode по умолчанию, только специальные поля хранят Unicode.
Чтобы включить поддержку Unicode:
Запустите MySQL сервер.
В параметрах соединения JDBC добавьте:
characterEncoding=UTF-8.
Настройка Unicode в PostgreSQL
Unicode поддерживается, если кодировка базы — UTF8. В этом случае Unicode доступен во всех полях без ограничения длины. Драйвер JDBC не требует дополнительных настроек.
Проверьте текущую кодировку:
show server_encoding;
Если не UTF8, создайте базу с нужной кодировкой:
create database keycloak with encoding 'UTF8';