В статье рассмотрим, как создать пользователя 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
Пока наш созданный пользователь не имеет каких-либо особых привилегий. Давайте назначим ему роль админа через команду 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: создавать, настраивать права и удалять их.