Бесплатная миграция IT-инфраструктуры в облако

Управление пользователями ClickHouse

Роман Андреев
Роман Андреев
Технический писатель
21 июня 2024 г.
651
4 минуты чтения
Средний рейтинг статьи: 5

В статье рассмотрим, как создать пользователя ClickHouse и настроить учетную запись (добавить пароль, выдать права).

Создаем пользователя в системе

Допустим, нам нужно создать нового пользователя под именем timeweb_admin. Это делает команда ClickHouse CREATE USER:

CREATE USER timeweb_admin IDENTIFIED BY 'password'

Мы создали пользователя и задали пароль. Но задать пароль можно и по-другому. Основные настройки пользователей ClickHouse находятся в файле конфигурации users.xml (этот файл находится в директории /etc/clickhouse-server/ на сервере, где установлен ClickHouse) в разделе users. Открываем этот файл и создаем такие строки:

<users>
   <timeweb_admin>
       <password></password>
       <!-- Or -->
       <password_sha256_hex></password_sha256_hex>
   </timeweb_admin>
</users>

Это значит, что мы можем присвоить как обычный пароль, так и в 16-ричном формате, оставив одно из значений по умолчанию (пустым). Если мы создаем базу данных для тестов или там нет какой-то конфиденциальной информации, можно воспользоваться и обычным паролем, например:

<users>
   <timeweb_admin>
       <password>simplepass</password>
   </timeweb_admin>
</users>

В противном случае вводим пароль в 16-ричном формате (0-f), а первое значение оставляем пустым, например, так:

<users>
   <timeweb_admin>
       <password></password>
       <!-- Or -->  <password_sha256_hex>76f95cf446430c895d5923a7860af00476f95cf446430c895d5923a7860af004</password_sha256_hex>
   </timeweb_admin>
</users>

Получить хэш для определенной строки можно так:

echo -n 'secretpass' | sha256sum

Если же вы собираетесь работать с одним из клиентов MySQL, понадобится создать пароль типа SHA1, который добавляется при помощи следующего тега:

<password_double_sha1_hex>76f95cf446430c895d5923a7860af00476f95cf4</password_double_sha1_hex>

Получить хэш можно аналогично:

echo -n 'secretpass' | sha1sum
cloud

Настраиваем права пользователя ClickHouse

Пока наш созданный пользователь не имеет каких-либо особых привилегий. Давайте назначим ему роль админа через команду GRANT.

GRANT ALL ON my_database.my_table TO timeweb_admin WITH GRANT OPTION;

В файле users.xml обратите внимание на тег <access_management></access_management>, который может принимать значения 0 и 1. Если выставить значение 1 здесь:

<access_management>1</access_management>

то активируется управление доступом через SQL.

Теперь настраиваем сеть, через которые мы будем получать доступ к ClickHouse. Для этого ищем блок <networks></networks> в конфигурационном файле и прописываем там нужные IP-адреса в любом из подходящих форматов: IPv4 или IPv6. Пример конфигурации:

<networks>`211.182.215.2`, `2b03:6d9::2`, `3b13:7c9::3/64`</networks>

Указать локальный доступ можно, прописав внутри следующее (подставьте нужный IP):

<ip>::1</ip>
<ip>127.0.0.1</ip>

Ограничиваем доступ к данным

Иногда полезно ограничить пользователя, дав ему доступ только к определенным частям базы данных. Давайте создадим нового пользователя и сделаем так, чтобы он получил доступ только к определенным строкам в таблице базы данных. Создаем пользователя:

CREATE USER timeweb_admin IDENTIFIED BY 'password'

Далее нам понадобится создать представление (view), которое фильтрует данные на основе определенных условий, и предоставить доступ к этому представлению пользователю, ограничивая тем самым его видимость данных. Представление создается так (замените значения original_table, some_column и certain_value на нужные):

CREATE VIEW limited_view AS
SELECT *
FROM original_table
WHERE some_column = 'certain_value'

А теперь предоставляем нашему пользователю права на это представление:

GRANT SELECT ON limited_view TO timeweb_admin

Теперь нам нужно проверить, что права были выданы корректно. Для этого мы можем использовать запросы к системным таблицам, таким как system.grants и system.privileges, например:

SELECT * 
FROM system.grants 
WHERE user_name = 'timeweb_admin'
  AND table = 'limited_view'

Теперь, если вы увидите строку с правами SELECT, значит, права выданы корректно.

Разверните ClickHouse на облачном сервере

Удаление учетной записи пользователя

Если пользователь больше не актуален, учетную запись можно удалить. Это делается с использованием команды DROP:

DROP USER timeweb_admin

На этом всё, мы узнали, как работать с учетными записями в ClickHouse: создавать, настраивать права и удалять их.

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
21 июня 2024 г.
651
4 минуты чтения
Средний рейтинг статьи: 5
Пока нет комментариев