Aller au contenu principal
Version: 3.0.0-alpha (Diátaxis)

Comment gerer les utilisateurs et profils ClickHouse

Ce guide explique comment creer et gerer les utilisateurs ClickHouse sur Hikube, definir des permissions en lecture seule pour les analystes, et configurer la retention des logs de requetes.

Prerequis

  • Une instance ClickHouse deployee sur Hikube (voir le demarrage rapide)
  • kubectl configure pour interagir avec l'API Hikube
  • Le fichier YAML de configuration de votre instance ClickHouse

Etapes

1. Creer un utilisateur admin

Definissez un utilisateur avec un acces complet en ecriture et lecture dans le champ users du manifeste :

clickhouse-users.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: ClickHouse
metadata:
name: my-clickhouse
spec:
replicas: 2
shards: 1
resourcesPreset: small
size: 10Gi
clickhouseKeeper:
enabled: true
replicas: 3
resourcesPreset: micro
size: 1Gi
users:
admin:
password: MonMotDePasseAdmin2024
attention

Utilisez des mots de passe forts en production. Les mots de passe sont stockes dans le manifeste en clair -- assurez-vous de proteger l'acces a vos fichiers YAML et aux Secrets Kubernetes associes.

2. Creer un utilisateur en lecture seule

Ajoutez un utilisateur analyst avec le flag readonly: true pour limiter l'acces aux requetes de lecture (SELECT) uniquement :

clickhouse-users-readonly.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: ClickHouse
metadata:
name: my-clickhouse
spec:
replicas: 2
shards: 1
resourcesPreset: small
size: 10Gi
clickhouseKeeper:
enabled: true
replicas: 3
resourcesPreset: micro
size: 1Gi
users:
admin:
password: MonMotDePasseAdmin2024
analyst:
password: AnalysteSecure2024
readonly: true
astuce

Creez un utilisateur en lecture seule pour les outils d'analyse et de reporting (Grafana, Metabase, etc.). Cela limite les risques de modification accidentelle des donnees.

3. Configurer les logs de requetes

ClickHouse enregistre les requetes executees dans les tables systeme query_log et query_thread_log. Configurez la taille de stockage et la duree de retention des logs :

clickhouse-users-logs.yaml
apiVersion: apps.cozystack.io/v1alpha1
kind: ClickHouse
metadata:
name: my-clickhouse
spec:
replicas: 2
shards: 1
resourcesPreset: small
size: 10Gi
logStorageSize: 5Gi
logTTL: 30
clickhouseKeeper:
enabled: true
replicas: 3
resourcesPreset: micro
size: 1Gi
users:
admin:
password: MonMotDePasseAdmin2024
analyst:
password: AnalysteSecure2024
readonly: true
  • logStorageSize : taille du volume persistant dedie aux logs (defaut : 2Gi)
  • logTTL : duree de retention en jours pour query_log et query_thread_log (defaut : 15)
remarque

Ajustez logTTL en fonction de vos besoins d'audit. Une valeur elevee consomme plus d'espace disque (logStorageSize). Pour un environnement de developpement, 7 jours est generalement suffisant.

4. Appliquer les changements

kubectl apply -f clickhouse-users-logs.yaml

5. Se connecter avec clickhouse-client

Testez la connexion avec chaque utilisateur :

# Connexion avec l'utilisateur admin
kubectl exec -it my-clickhouse-0-0 -- clickhouse-client --user admin --password MonMotDePasseAdmin2024
# Connexion avec l'utilisateur analyst
kubectl exec -it my-clickhouse-0-0 -- clickhouse-client --user analyst --password AnalysteSecure2024

6. Verifier les permissions

Une fois connecte avec l'utilisateur analyst, verifiez que l'ecriture est bloquee :

-- Cette requete doit reussir (lecture autorisee)
SELECT count() FROM system.tables;

-- Cette requete doit echouer (ecriture interdite)
CREATE TABLE test_write (id UInt32) ENGINE = Memory;

L'utilisateur en lecture seule recevra une erreur du type :

Code: 164. DB::Exception: analyst: Not enough privileges.

Verification

Verifiez que les utilisateurs sont correctement configures :

# Verifier la configuration de la ressource ClickHouse
kubectl get clickhouse my-clickhouse -o yaml | grep -A 10 users

# Verifier que les pods sont en etat Running
kubectl get pods -l app.kubernetes.io/instance=my-clickhouse

Connectez-vous en tant qu'admin et listez les utilisateurs :

SELECT name, storage, auth_type FROM system.users;

Pour aller plus loin