Аутентификация и авторизация¶
Эта тема даёт целостные рекомендации по лучшим практикам при разработке собственного контура аутентификации и авторизации.
Подробные инструкции по отдельным операциям см. по ссылкам в See Also.
Реальный сценарий в enterprise¶
Крупные организации часто имеют сложную структуру и множество сотрудников, использующих различные платформы и инструменты. С точки зрения IT‑governance единая система идентификации, аутентификации и авторизации даёт серьёзные преимущества:
Упрощённое управление пользователями: администраторам не нужно вручную создавать/удалять пользователей и назначать права в разных системах. Управление жизненным циклом пользователей (например, онбординг/оффбординг) становится бесшовным и удобным для аудита.
Повышенная безопасность: механизм Single Sign‑On (SSO) избавляет пользователей от управления несколькими учётными данными, уменьшая поверхность атаки.
Доступ, выравненный по ролям: права доступа обычно привязаны к роли или отделу пользователя. Хорошо структурированная система идентификации упрощает и повышает точность решений по авторизации.
Пример¶
Предположим, в SaaS‑компанию приходят три новых сотрудника в разные отделы: один Marketing Specialist и двое Solution Architect.
Организационно они в разных командах.
С точки зрения идентификации их e‑mail‑аккаунты служат учётными данными для входа на внутренних платформах.
По правам доступа каждому предоставлен доступ к разным платформам:
Marketing Specialist может входить в бэкенд Hubspot для просмотра лидов.
Solution Architect имеют доступ к service console и управляют сервисами закреплённых клиентов.
Несмотря на использование одного identity provider, их права строго разграничены:
Marketing Specialist имеет доступ только к Hubspot.
Solution Architect могут входить в service console, но не к сервисам пользователей, за которых они не отвечают. Доступа к Hubspot у них нет.
Три слоя контроля доступа¶
Этот пример подчёркивает три ключевых компонента в потоке корпоративной идентификации и доступа:
Identity Authentication — «Я Питер, подтверждённый сотрудник компании SaaS».
Access Authentication — «Как Solution Architect, я авторизован для входа в service console». (Не все подтверждённые сотрудники должны иметь доступ ко всем сервисам.)
Action Authorization — «Как клиент компании SaaS, я могу видеть информацию только по нашему сервису, но не по чужим».
В контексте базы данных¶
Эти слои применимы и к СУБД:
Проверка личности: подтверждение, что пользователь — действительный сотрудник со своим паролем.
Доступ к кластеру: проверка, что пользователь или его группа имеют право логина в конкретный кластер.
Авторизация операций: проверка, может ли пользователь выполнять запросы, загрузку данных и т. п.
Как видно, аутентификация и авторизация на практике тесно связаны. Запрос на аутентификацию часто подразумевает более широкий контроль доступа. Поэтому важно понимать полный поток доступа.
Ключевые понятия¶
LDAP¶
Lightweight Directory Access Protocol (LDAP) — протокол доступа и управления распределённой справочной информацией. Его можно воспринимать как «глобальную адресную книгу» организации:
У каждого пользователя есть уникальный путь (Distinguished Name, DN).
LDAP хранит базовую информацию о пользователе, включая пароли.
LDAP управляет группами и членством в них.
С помощью
ldapsearchможно получать пользователей или группы.
LDAP можно использовать:
как источник аутентификации (проверка логина и пароля);
как поставщик информации о группах для контроля доступа.
Возможности¶
Система поддерживает все три слоя контроля доступа:
User Authentication — «Я — это действительно я».
Login Authorization — «Мне разрешён доступ к этому кластеру» (зависит от пользователя или членства в группах).
Operation Authorization — «Я могу выполнить этот запрос или загрузить этот датасет» (авторизация может основываться на идентичности или группе).
Начиная с v3.5, StarRocks предоставляет модульную, компонуемую модель для различных комбинаций компонентов IAM.
Feature Mapping

Аутентификация¶
Сравнение поддерживаемых режимов аутентификации:
Method |
CREATE USER (Native user) |
CREATE SECURITY INTEGRATION (Session‑based dummy user) |
|---|---|---|
Description |
Пользователи создаются вручную в кластере. Можно связать их с внешними системами аутентификации. Пользователь существует явно в кластере. |
Определяет внешнюю интеграцию аутентификации. Кластер не хранит информацию о пользователях. Можно объединить с Group Provider для ограничения допускаемых пользователей. |
Login Process |
Пользователь должен быть предварительно создан в кластере. При входе аутентифицируется через StarRocks или настроенную внешнюю систему (например, LDAP). Только предварительно созданные пользователи могут войти. |
При входе StarRocks аутентифицирует пользователя во внешней системе. При успехе создаёт внутреннего «dummy user» в границах сессии; он удаляется по завершении сессии. |
Authorization Process |
Поскольку пользователи существуют в кластере, права можно назначить заранее через нативную систему авторизации или Apache Ranger. |
Хотя пользователи не сохраняются, можно заранее определить сопоставления ролей и групп. При входе роли назначаются на основе групп (RBAC). Параллельно можно использовать Apache Ranger. |
Pros & Cons, Use Cases |
|
|
Эти режимы могут сосуществовать. Когда пользователь пытается войти:
Кластер сначала проверяет, существует ли пользователь как native user, и пытается аутентифицировать его соответствующим образом.
Если пользователь не найден, кластер следует вниз по
authentication_chain, заданной в конфигурации.
Такой гибридный режим сочетает гибкость и контроль, подходя под разные орг‑требования.
Вариант 1: Создать Native User с внешней аутентификацией¶
Например, можно создать native user с LDAP:
CREATE USER <username> IDENTIFIED WITH authentication_ldap_simple AS 'uid=tom,ou=company,dc=example,dc=com';
Затем выполните GRANT привилегий или ролей пользователю, либо делегируйте авторизацию внешним системам, таким как Apache Ranger.
Вариант 2: Security Integration с внешней аутентификацией¶
Можно создать security integration для допуска кластера к внешней службе аутентификации:
CREATE SECURITY INTEGRATION <security_integration_name>
PROPERTIES (
"type" = "authentication_ldap_simple",
"authentication_ldap_simple_server_host" = "",
"authentication_ldap_simple_server_port" = "",
"authentication_ldap_simple_bind_base_dn" = "",
"authentication_ldap_simple_user_search_attr" = ""
"authentication_ldap_simple_bind_root_dn" = "",
"authentication_ldap_simple_bind_root_pwd" = "",
"authentication_ldap_simple_ssl_conn_allow_insecure" = "{true | false}",
"authentication_ldap_simple_ssl_conn_trust_store_path" = "",
"authentication_ldap_simple_ssl_conn_trust_store_pwd" = "",
"comment" = ""
);
После этого необходимо настроить параметр FE authentication_chain и включить созданную security integration для кластера.
ADMIN SET FRONTEND CONFIG (
"authentication_chain" = "<security_integration_name>[... ,]"
);
Group Provider (необязателен, но рекомендован)¶
Информация о группах в кластере развязана как с аутентификацией, так и с авторизацией. Это общий слой, который можно настраивать независимо и использовать и для контроля логина, и для контроля доступа.
Как используются группы¶
На этапе аутентификации
При совместном использовании с security integration членство в группах может определять круг пользователей, которым разрешён вход. Только прошедшие аутентификацию и принадлежащие указанной группе смогут получить доступ к кластеру.
На этапе авторизации
Членство в группах учитывается автоматически. Если привилегии выданы группе, все её участники унаследуют права при проверке доступа.
Примечания по конфигурации¶
При настройке group provider следует указать:
Группы, определяющие кто может логиниться (login scope)
Группы, определяющие кто имеет доступ к конкретным ресурсам (authorization)
Важно: идентичность пользователя (например, имя или ID), возвращаемая group provider, должна совпадать с идентичностью, используемой на этапах аутентификации и авторизации. Несоответствие приведёт к ошибкам входа или прав.
Пример¶
Ниже — пример на основе LDAP.
Создайте group provider.
-- LDAP Group Provider CREATE GROUP PROVIDER <group_provider_name> PROPERTIES ( "type" = "ldap", ldap_info, ldap_search_group_arg, ldap_search_attr, [ldap_cache_attr] ) ldap_info ::= "ldap_conn_url" = "", "ldap_bind_root_dn" = "", "ldap_bind_root_pwd" = "", "ldap_bind_base_dn" = "", ["ldap_conn_timeout" = "",] ["ldap_conn_read_timeout" = ""] ldap_search_group_arg ::= { "ldap_group_dn" = "" | "ldap_group_filter" = "" }, "ldap_group_identifier_attr" = "" ldap_search_user_arg ::= "ldap_group_member_attr" = "", "ldap_user_search_attr" = "" ldap_cache_arg ::= "ldap_cache_refresh_interval" = ""Интегрируйте group provider с security integration.
ALTER SECURITY INTEGRATION <security_integration_name> SET ( "group_provider" = "", "permitted_groups" = "" )Интегрируйте group provider с системой авторизации. Можно использовать нативную авторизацию или Apache Ranger.
Нативная авторизация:
Роли можно назначать группам. При входе пользователям автоматически назначаются роли на основе членства.
GRANT role TO EXTERNAL GROUP <group_name>Apache Ranger:
После входа StarRocks передаёт информацию о группах в Ranger для оценки политик.
Авторизация¶
StarRocks поддерживает как внутренние, так и внешние механизмы авторизации, их можно использовать независимо или комбинировать:
Внутренняя авторизация
Встроенные RBAC (Role‑Based Access Control) и IBAC (Identity‑Based Access Control).
RBAC: роли назначаются пользователям или группам, а привилегии — ролям.
IBAC: привилегии выдаются напрямую пользователям.
Внешняя авторизация
Интеграция с Apache Ranger для централизованного и унифицированного управления доступом.
Apache Ranger можно использовать как в полном объёме, так и совместно с нативной авторизацией StarRocks.
Полная авторизация в Ranger: и внутренние, и внешние таблицы (например, Hive) авторизуются через Ranger.
Права на внутренние таблицы — через StarRocks plugin для Ranger.
Права на внешние таблицы — через StarRocks plugin или плагины внешних сервисов (например, Hive plugin).
Гибридная авторизация
Внутренние таблицы: авторизация нативной системой StarRocks (RBAC/IBAC).
Внешние таблицы: авторизация через Ranger; права могут управляться через StarRocks plugin или соответствующий внешний сервис (например, Hive, HDFS).
Эта гибкость позволяет постепенно мигрировать к централизованной авторизации или поддерживать гибридную модель в соответствии с текущей инфраструктурой и политиками безопасности.
Комбинированные решения¶
Выберите подход на основе желаемого сценария аутентификации и авторизации.
Решение 1: Внешняя аутентификация + внешняя авторизация¶
Можно полностью использовать внешние системы для управления логином и правами доступа к кластеру. Общая схема:
Примените security integration для связи с внешней аутентификацией.
Настройте необходимые групповые сведения для аутентификации и авторизации в group provider.
Определите в security integration группы, которым разрешён вход в кластер. Пользователи из этих групп смогут входить.
Создайте StarRocks service в Apache Ranger для управления доступом как к внутренним, так и к внешним таблицам. Для внешних таблиц можно переиспользовать существующие сервисы.
При выполнении запроса система отправляет в Ranger идентичность пользователя и его группы (как настроено в group provider) для авторизации.
При успешной проверке выполняется запрос.
Необходимо обеспечить согласованность user ID и имён групп во всех интегрированных системах на всём пути.

Решение 2: Внешняя аутентификация (Native User) + внутренняя авторизация¶
Если вы хотите использовать встроенную систему авторизации, полагаясь при этом на внешнюю аутентификацию:
Создавайте пользователей вручную и указывайте для каждого внешний метод аутентификации.
После создания назначайте роли или привилегии стандартными командами
GRANT.После аутентификации пользователь авторизуется нативной системой прав кластера.
Хотя вручную созданные пользователи могут интегрироваться с group provider и Ranger, этот подход сложнее и менее автоматизирован, чем использование security integration. Поэтому это не рекомендованная практика.
Решение 3: Внешняя аутентификация (внешняя идентичность) + внутренняя авторизация¶
Если вы хотите использовать встроенную авторизацию StarRocks, опираясь на внешнюю аутентификацию:
Настройте security integration для связи с внешней аутентификацией.
Настройте необходимые групповые сведения в group provider.
В security integration определите группы, которым разрешён вход в кластер StarRocks.
Создайте необходимые роли в StarRocks и выдайте их внешним группам.
При входе пользователь должен быть аутентифицирован и состоять в разрешённой группе. После успешного входа StarRocks автоматически назначит соответствующие роли на основе членства в группе.
Во время выполнения запросов StarRocks как обычно применяет внутреннюю RBAC‑авторизацию.
Дополнительно можно комбинировать с Ranger: например, для внутренних таблиц — нативный RBAC, для внешних — Ranger. При авторизации через Ranger StarRocks всё равно передаст user ID и информацию о группах в Ranger для контроля доступа.
