Аутентификация и авторизация
Система управления правами доступа Doris построена по образцу механизма управления правами MySQL. Она поддерживает детальное управление правами на уровне строк и столбцов, управление доступом на основе ролей, а также механизм белого списка.
Глоссарий
-
Идентификатор пользователя
В системе управления правами пользователь представлен идентификатором пользователя (User Identity). Идентификатор пользователя состоит из двух частей:
usernameиhost. Частьusername— это имя пользователя, состоящее из латинских букв (прописных и строчных). Частьhostобозначает IP-адрес, с которого пользователь устанавливает соединение. Идентификатор пользователя записывается какusername@'host'и обозначает пользователяusername, подключающегося сhost.Другой вариант записи идентификатора пользователя —
username@['domain'], гдеdomainобозначает доменное имя, которое с помощью DNS можно преобразовать в набор IP-адресов. В конечном счёте такая запись представляется набором идентификаторовusername@'host', поэтому далее для единообразия используется обозначениеusername@'host'. -
Право доступа
Права доступа применяются к узлам, каталогам данных, базам данных или таблицам. Разные права разрешают выполнение разных операций.
-
Роль
Doris позволяет создавать роли с произвольными именами. Роль можно рассматривать как набор прав доступа. Вновь созданным пользователям можно назначить роль, после чего они автоматически наследуют её права. Последующие изменения прав роли также отражаются на правах всех пользователей, которым назначена эта роль.
-
Свойство пользователя
Свойства пользователя относятся непосредственно к пользователю, а не к его идентификатору. Это означает, что
user@'192.%'иuser@['domain']используют один и тот же набор свойств, принадлежащих пользователюuser, а не идентификаторуuser@'192.%'илиuser@['domain'].К свойствам пользователя относятся, в частности, максимальное количество соединений пользователя, конфигурации кластеров загрузки данных и другие параметры.
Общая схема аутентификации и авторизации
Процесс входа пользователя в Apache Doris состоит из двух этапов: аутентификации и авторизации.
- Аутентификация: проверка личности на основе предоставленных пользователем учётных данных (например, имени пользователя, IP-адреса клиента и пароля). После успешной проверки пользователю сопоставляется идентификатор пользователя, определённый в системе.
- Авторизация: на основе полученного идентификатора пользователя и связанных с ним прав проверяется, разрешено ли пользователю выполнять запрашиваемые операции.
Аутентификация
Doris поддерживает встроенные схемы аутентификации, а также аутентификацию через LDAP.
Встроенная схема аутентификации Doris
Аутентификация выполняется на основе имён пользователей, паролей и других сведений, хранящихся непосредственно в Doris.
Администраторы создают пользователей командой CREATE USER и просматривают права и роли всех пользователей командой SHOW ALL GRANTS.
При входе пользователя система проверяет корректность имени пользователя, пароля и IP-адреса клиента.
Политика паролей
Doris поддерживает следующие политики, помогающие управлять паролями.
-
PASSWORD_HISTORYОпределяет, может ли пользователь повторно использовать один из предыдущих паролей при смене текущего. Например,
PASSWORD_HISTORY 10означает, что последние 10 паролей нельзя использовать в качестве нового пароля. При установкеPASSWORD_HISTORY DEFAULTиспользуется значение глобальной переменнойPASSWORD_HISTORY. Значение 0 отключает эту функцию. По умолчанию используется 0.Примеры:
- Установка глобальной переменной:
SET GLOBAL password_history = 10 - Настройка для пользователя:
ALTER USER user1@'ip' PASSWORD_HISTORY 10
- Установка глобальной переменной:
-
PASSWORD_EXPIREЗадаёт срок действия пароля текущего пользователя. Например,
PASSWORD_EXPIRE INTERVAL 10 DAYозначает, что срок действия пароля истечёт через 10 дней. ЗначениеPASSWORD_EXPIRE NEVERуказывает, что срок действия пароля не ограничен. При установкеPASSWORD_EXPIRE DEFAULTиспользуется значение глобальной переменнойdefault_password_lifetime(в днях). По умолчанию используется NEVER (или 0), то есть срок действия не ограничен.Примеры:
- Установка глобальной переменной:
SET GLOBAL default_password_lifetime = 1 - Настройка для пользователя:
ALTER USER user1@'ip' PASSWORD_EXPIRE INTERVAL 10 DAY
- Установка глобальной переменной:
-
FAILED_LOGIN_ATTEMPTSиPASSWORD_LOCK_TIMEЗадают количество попыток ввода неверного пароля, после которого учётная запись блокируется, и длительность блокировки. Например,
FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAYозначает, что после 3 неудачных попыток входа учётная запись будет заблокирована на один день. Администраторы могут разблокировать учётную запись с помощью инструкцииALTER USER.Пример:
- Настройка для пользователя:
ALTER USER user1@'ip' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY
- Настройка для пользователя:
-
Сложность пароля
Управляется глобальной переменной
validate_password_policy. Значение по умолчанию —NONE/0, при котором сложность пароля не проверяется. Если установленоSTRONG/2, пароль должен содержать символы как минимум трёх из следующих типов: прописные буквы, строчные буквы, цифры и специальные символы. Длина пароля должна составлять не менее 8 символов.Пример:
SET validate_password_policy=STRONG
Начиная с Doris 4.0.4, политика проверки сложности паролей расширена следующим образом:
-
Если для
validate_password_policyустановлено значениеSTRONG/2, пароль должен содержать все 4 типа символов (прописные буквы, строчные буквы, цифры и специальные символы), тогда как ранее требовалось «3 из 4». -
Добавлена проверка по словарю: пароли не могут содержать распространённые слова, делающие их слабыми (например, password, admin, test, root и т. д.). В систему встроен словарь таких слов, и пароли, содержащие их, отклоняются.
-
Добавлена поддержка пользовательских файлов словарей: имя файла собственного словаря можно задать через глобальную переменную
validate_password_dictionary_file. Файл словаря необходимо разместить в каталоге${DORIS_HOME}/plugins/security/. Формат файла — одно слово на строку; пустые строки и строки, начинающиеся с#, игнорируются.Пример:
SET GLOBAL validate_password_dictionary_file = 'my_dictionary.txt'
Дополнительные сведения см. в разделе ALTER USER.
Схема аутентификации на основе LDAP
См. раздел Схема аутентификации на основе LDAP.
Авторизация
Операции управления правами доступа
- Создание пользователя: CREATE USER
- Изменение пользователя: ALTER USER
- Удаление пользователя: DROP USER
- Предоставление прав / назначение роли: GRANT
- Отзыв прав / отмена назначения роли: REVOKE
- Создание роли: CREATE ROLE
- Удаление роли: DROP ROLE
- Изменение роли: ALTER ROLE
- Просмотр прав и ролей текущего пользователя: SHOW GRANTS
- Просмотр прав и ролей всех пользователей: SHOW ALL GRANTS
- Просмотр созданных ролей: SHOW ROLES
- Установка свойства пользователя: SET PROPERTY
- Просмотр свойства пользователя: SHOW PROPERTY
- Смена пароля: SET PASSWORD
- Просмотр всех поддерживаемых прав: [SHOW PRIVILEGES]
- Просмотр политики доступа к строкам: [SHOW ROW POLICY]
- Создание политики доступа к строкам: [CREATE ROW POLICY]
Типы прав доступа
В настоящее время Doris поддерживает следующие права доступа:
-
Node_privПраво на изменение узлов. Включает добавление, удаление и вывод из эксплуатации узлов FE, BE и BROKER.
Пользователи Root имеют это право по умолчанию. Пользователи, обладающие одновременно правами
Grant_privиNode_priv, могут предоставлять это право другим пользователям.Это право можно предоставить только на уровне Global.
-
Grant_privПраво на управление правами доступа. Позволяет выполнять операции предоставления и отзыва прав, а также добавления, удаления и изменения пользователей и ролей.
До версии 2.1.2 для предоставления прав другим пользователям или ролям текущему пользователю было достаточно права
Grant_privсоответствующего уровня. После версии 2.1.2 текущий пользователь также должен обладать правом на ресурс, доступ к которому он предоставляет.Для назначения ролей другим пользователям требуется право
Grant_privна уровне Global. -
Select_privПраво на чтение данных из каталогов данных, баз данных и таблиц.
-
Load_privПраво на запись данных в каталоги данных, базы данных и таблицы. Включает операции Load, Insert, Delete и другие.
-
Alter_privПраво на изменение каталогов данных, баз данных и таблиц. Включает переименование баз данных и таблиц, добавление, удаление и изменение столбцов, добавление и удаление разделов и другие операции.
-
Create_privПраво на создание каталогов данных, баз данных, таблиц и представлений.
-
Drop_privПраво на удаление каталогов данных, баз данных, таблиц и представлений.
-
Usage_privПраво на использование Resources и Workload Groups.
-
Show_view_privПраво на выполнение
SHOW CREATE VIEW.
Уровни прав доступа
Глобальные права
Права, предоставленные инструкцией GRANT с областью действия *.*.*. Эти права распространяются на любую таблицу в любом Catalog.
Права на Catalog
Права, предоставленные инструкцией GRANT с областью действия ctl.*.*. Эти права распространяются на любую таблицу в указанном Catalog.
Права на базу данных
Права, предоставленные инструкцией GRANT с областью действия ctl.db.*. Эти права распространяются на любую таблицу в указанной базе данных.
Права на таблицу
Права, предоставленные инструкцией GRANT с областью действия ctl.db.tbl. Эти права распространяются на любой столбец указанной таблицы.
Права на столбцы
Права на столбцы в первую очередь используются для ограничения доступа пользователей к отдельным столбцам таблицы. Они позволяют администраторам задавать права на просмотр, редактирование и другие действия с определёнными столбцами, управляя доступом пользователей к данным этих столбцов и операциями с ними.
Права на отдельные столбцы таблицы можно предоставить с помощью GRANT Select_priv(col1,col2) ON ctl.db.tbl TO user1.
В настоящее время для столбцов поддерживается только право Select_priv.
Права на уровне строк
Политики доступа к строкам позволяют администраторам определять правила доступа на основе полей данных и управлять тем, какие строки доступны пользователям.
В частности, администраторы могут создавать правила, которые фильтруют строки или ограничивают доступ пользователей к ним на основе фактических значений, хранящихся в данных.
Начиная с версии 1.2, права на уровне строк можно создавать командой CREATE ROW POLICY.
Начиная с версии 2.1.2, поддерживается настройка прав на уровне строк через механизм Row Level Filter в Apache Ranger.
Права на использование
-
Права на Resource
Права на ресурсы задаются специально для Resources, не связаны с правами на базы данных или таблицы и позволяют назначать только
Usage_privиGrant_priv.Права на все Resources можно предоставить с помощью
GRANT USAGE_PRIV ON RESOURCE '%' TO user1. -
Права на Workload Group
Права на Workload Group задаются специально для Workload Groups, не связаны с правами на базы данных или таблицы и позволяют назначать только
Usage_privиGrant_priv.Права на все Workload Groups можно предоставить с помощью
GRANT USAGE_PRIV ON WORKLOAD GROUP '%' TO user1.
Маскирование данных
Маскирование данных — это способ защиты конфиденциальных данных путём изменения, замены или скрытия исходных значений. При этом замаскированные данные сохраняют определённые форматы и характеристики, но больше не содержат конфиденциальной информации.
Например, администраторы могут заменить часть или все цифры в конфиденциальных полях, таких как номера кредитных карт или удостоверений личности, звёздочками * или другими символами либо заменить настоящие имена псевдонимами.
Начиная с версии 2.1.2, поддерживается настройка политик маскирования данных для отдельных столбцов через механизм Data Masking в Apache Ranger. В настоящее время такие политики можно настроить только через Apache Ranger.
Встроенная схема авторизации Doris
Система прав доступа Doris основана на модели RBAC (управление доступом на основе ролей): пользователям назначаются роли, а ролям — права доступа. Таким образом, пользователи получают права через свои роли.
При удалении роли пользователи автоматически теряют все права, связанные с этой ролью.
При отмене назначения роли пользователь автоматически теряет все права этой роли.
При добавлении прав роли или их отзыве права пользователей, которым назначена эта роль, изменяются соответствующим образом.
┌────────┐ ┌────────┐ ┌────────┐
│ user1 ├────┬───► role1 ├────┬────► priv1 │
└────────┘ │ └────────┘ │ └────────┘
│ │
│ │
│ ┌────────┐ │
│ │ role2 ├────┤
┌────────┐ │ └────────┘ │ ┌────────┐
│ user2 ├────┘ │ ┌─► priv2 │
└────────┘ │ │ └────────┘
┌────────┐ │ │
┌──────► role3 ├────┘ │
│ └────────┘ │
│ │
│ │
┌────────┐ │ ┌────────┐ │ ┌────────┐
│ userN ├─┴──────► roleN ├───────┴─► privN │
└────────┘ └────────┘ └────────┘
Как показано выше:
User1 и user2 получают право priv1 через role1.
UserN получает право priv1 через role3, а права priv2 и privN — через roleN. Таким образом, userN одновременно обладает правами priv1, priv2 и privN.
Для удобства права можно предоставлять непосредственно пользователю. Внутри системы для каждого пользователя создаётся уникальная роль по умолчанию. Предоставление прав пользователю фактически означает предоставление прав его роли по умолчанию.
Роль по умолчанию нельзя удалить или назначить другому пользователю. При удалении пользователя его роль по умолчанию также удаляется автоматически.
Схема авторизации на основе Apache Ranger
См. раздел Схема авторизации на основе Apache Ranger.
Частые вопросы
Пояснения к правам доступа
-
Пользователи с правами ADMIN или правами GRANT на уровне GLOBAL могут выполнять следующие операции:
- CREATE USER
- DROP USER
- ALTER USER
- SHOW GRANTS
- CREATE ROLE
- DROP ROLE
- ALTER ROLE
- SHOW ROLES
- SHOW PROPERTY FOR USER
-
GRANT/REVOKE
- Пользователи с правами ADMIN могут предоставлять и отзывать права любого пользователя.
- Пользователи с правами ADMIN или правами GRANT на уровне GLOBAL могут назначать роли пользователям.
- Пользователи, обладающие правом GRANT соответствующего уровня и правами, которые требуется предоставить, могут предоставлять эти права пользователям и ролям.
-
SET PASSWORD
- Пользователи с правами ADMIN или правами GRANT на уровне GLOBAL могут задавать пароли пользователей, отличных от root.
- Обычные пользователи могут задавать пароль для собственного идентификатора пользователя. Свой идентификатор пользователя можно посмотреть командой
SELECT CURRENT_USER(). - Пользователи ROOT могут изменять собственный пароль.
Дополнительные сведения
-
При инициализации Doris автоматически создаются следующие пользователи и роли:
- Роль operator: обладает правами
Node_privиAdmin_priv, то есть всеми правами в Doris. - Роль admin: обладает правом
Admin_priv, то есть всеми правами, кроме изменения узлов. - root@'%': пользователь root, которому разрешён вход с любого узла и назначена роль operator.
- admin@'%': пользователь admin, которому разрешён вход с любого узла и назначена роль admin.
- Роль operator: обладает правами
-
Удаление созданных по умолчанию пользователей и ролей, а также изменение их прав не поддерживается.
- Удаление пользователей root@'%' и admin@'%' не поддерживается, но разрешено создавать и удалять пользователей root@'xxx' и admin@'xxx' (где xxx обозначает любой хост, кроме %). Doris рассматривает таких пользователей как обычных.
- Отзыв ролей по умолчанию у root@'%' и admin@'%' не поддерживается.
- Удаление ролей operator и admin не поддерживается.
- Изменение прав ролей operator и admin не поддерживается.
-
Роль operator назначена только одному пользователю — Root. Роль admin может быть назначена нескольким пользователям.
-
Ниже приведены пояснения к некоторым операциям, которые могут приводить к конфликтам:
-
Конфликт домена и IP-адреса:
Предположим, создан следующий пользователь:
CREATE USER user1@['domain'];Ему предоставлены права:
GRANT SELECT_PRIV ON *.* TO user1@['domain']Это доменное имя преобразуется в два IP-адреса: ip1 и ip2.
Предположим, позднее мы предоставляем отдельное право пользователю
user1@'ip1':GRANT ALTER_PRIV ON *.* TO user1@'ip1';Тогда
user1@'ip1'будет обладать правами Select_priv и Alter_priv. При последующем изменении правuser1@['domain']праваuser1@'ip1'уже не будут изменяться вслед за ними. -
Конфликт пересекающихся IP-адресов:
Предположим, созданы следующие пользователи:
CREATE USER user1@'%' IDENTIFIED BY "12345";
CREATE USER user1@'192.%' IDENTIFIED BY "abcde";Запись
'192.%'имеет более высокий приоритет, чем'%', поэтому, если пользовательuser1с компьютера192.168.1.1попытается войти в Doris с паролем'12345', доступ будет отклонён.
-
-
Забытый пароль
Если вы забыли пароль и не можете войти в Doris, добавьте
skip_localhost_auth_check=trueв конфигурационный файл FE и перезапустите FE. После этого можно войти в Doris с локального компьютера от имени root без пароля.После входа можно сбросить пароль командой
SET PASSWORD. -
Никто, кроме самого пользователя root, не может сбросить его пароль.
-
Право
Admin_privможно предоставлять и отзывать только на уровне GLOBAL. -
current_user()иuser()Пользователи могут просмотреть свои
current_userиuser, выполнивSELECT current_user()иSELECT user()соответственно. Здесьcurrent_userобозначает идентификатор, с которым пользователь прошёл аутентификацию, аuser— фактический идентификатор пользователя в данный момент.Например:
Предположим, создан
user1@'192.%', после чего пользовательuser1входит с адреса192.168.10.1. В этом случаеcurrent_userбудет равенuser1@'192.%', аuser—user1@'192.168.10.1'.Все права предоставляются определённому
current_user, а фактический пользователь получает все права соответствующегоcurrent_user.
Рекомендации по использованию
Ниже приведены примеры использования системы прав доступа Doris.
-
Сценарий 1
Пользователи кластера Doris делятся на администраторов (Admin), инженеров-разработчиков (RD) и пользователей (Client). Администраторы имеют все права во всём кластере и в основном отвечают за настройку кластера и управление узлами. Инженеры-разработчики отвечают за моделирование данных для бизнес-задач, включая создание баз данных и таблиц, загрузку и изменение данных. Пользователи обращаются к различным базам данных и таблицам для получения данных.
В этом сценарии администраторам можно предоставить права ADMIN или GRANT. Разработчикам RD можно предоставить права CREATE, DROP, ALTER, LOAD и SELECT для любых или определённых баз данных и таблиц. Пользователям Client можно предоставить права SELECT для любых или определённых баз данных и таблиц. Кроме того, для упрощения предоставления прав нескольким пользователям можно создать разные роли.
-
Сценарий 2
В одном кластере могут размещаться данные нескольких бизнес-направлений, каждое из которых может использовать один или несколько наборов данных. Каждому направлению необходимо управлять своими пользователями. В этом сценарии администратор может создать для каждой базы данных пользователя с правами GRANT на уровне DATABASE. Такой пользователь сможет предоставлять права только на указанную базу данных.
-
Чёрный список
Doris поддерживает только белый список, но с помощью определённых приёмов можно имитировать чёрный список. Предположим, создан пользователь с именем
user@'192.%', которому разрешён вход с адресов192.*. Если необходимо запретить вход с адреса192.168.10.1, можно создать другого пользователяcmy@'192.168.10.1'с новым паролем. Поскольку192.168.10.1имеет более высокий приоритет, чем192.%, пользователь с адреса192.168.10.1больше не сможет войти со старым паролем.