LindormTSDB protège vos données grâce à un contrôle d'accès multicouche. Au niveau du moteur, le contrôle d'accès repose sur l'authentification des utilisateurs et la vérification des autorisations. Cette fonctionnalité est désactivée par défaut. Cette rubrique explique comment activer l'authentification, ajouter les identifiants aux connexions client et comprendre le modèle d'autorisation.
Contrôle d'accès dans LindormTSDB
LindormTSDB applique le contrôle d'accès à trois niveaux :
RAM — Resource Access Management (RAM) fourni par Alibaba Cloud, qui régit les comptes Alibaba Cloud pouvant accéder à l'instance.
Couche physique — Listes d'autorisation IP au niveau de l'instance. Pour plus d'informations, consultez la section Configurer les listes d'autorisation.
Couche logique — Authentification des utilisateurs et vérification des autorisations au niveau du moteur, décrites dans cette rubrique.
Avant d'activer l'authentification
L'activation de l'authentification entraîne l'échec des connexions de service existantes qui n'incluent pas d'identifiants. Avant de l'activer, procédez comme suit :
Vérifiez les identifiants de l'utilisateur initial. Une instance Lindorm est fournie avec un utilisateur initial. Pour les instances exécutant LindormTSDB 3.4.30 ou une version antérieure, le nom d'utilisateur et le mot de passe par défaut sont tous deux
root. Pour les versions ultérieures, ils sont tous deux définis surroot_tsdb. Modifiez le mot de passe immédiatement après la création de l'instance.Mettez à jour toutes les chaînes de connexion des applications pour inclure les identifiants.
Planifiez les redémarrages de service. Après l'activation de l'authentification, tout service en cours d'exécution qui n'inclut pas d'identifiants dans sa connexion échouera. Planifiez en conséquence vos fenêtres de maintenance.
Activer l'authentification
Exécutez l'instruction SQL suivante pour activer l'authentification :
ALTER SYSTEM SET USER_AUTH=TRUE;
Pour vérifier que l'authentification est activée :
SHOW PARAMETER USER_AUTH;
Pour désactiver l'authentification, exécutez ALTER SYSTEM SET USER_AUTH=FALSE;. La désactivation de l'authentification supprime tous les contrôles d'accès et expose l'instance à des risques de sécurité. Maintenez l'authentification activée dans les environnements de production.
Se connecter avec des identifiants
Une fois l'authentification activée, toutes les connexions client doivent inclure un nom d'utilisateur et un mot de passe. L'utilisateur qui se connecte doit également disposer des autorisations appropriées sur la base de données ou la table cible.
lindorm-cli
lindorm-cli -url <Endpoint for LindormTSDB SQL> -username <Username> -password <Password> -database <Database name>
Pour plus d'informations, consultez la section Utiliser Lindorm-cli pour se connecter à LindormTSDB et l'utiliser.
JDBC
String url = "<Endpoint for LindormTSDB SQL>";
String username = "<Username>";
String password = "<Password>";
Connection conn = null;
try {
conn = DriverManager.getConnection(url, username, password);
// Perform operations after the client is connected to LindormTSDB.
} catch (SQLException e) {
e.printStackTrace();
}
Pour plus d'informations, consultez le tutoriel Utiliser le pilote JDBC pour Lindorm afin de se connecter à LindormTSDB et l'utiliser.
Pool de connexions Druid
dataSource.setDriver(DriverManager.getDriver("<Endpoint for LindormTSDB SQL>"))
dataSource.setUrl("<Endpoint for LindormTSDB SQL>")
dataSource.setUsername("<Username>")
dataSource.setPassword("<Password>")
Pour plus d'informations, consultez le tutoriel Utiliser le pool de connexions Druid pour se connecter à LindormTSDB.
API HTTP
Les applications qui utilisent des opérations d'API HTTP compatibles avec OpenTSDB doivent inclure les identifiants dans l'en-tête Authorization sous forme de chaîne encodée en Base64.
L'exemple suivant construit l'en-tête d'autorisation et envoie une requête SQL :
import base64
import requests
url = "<HTTP Endpoint for LindormTSDB>/api/v2/sql"
username = "<Username>"
password = "<Password>"
# Encode credentials as Base64
credentials = base64.b64encode(f"{username}:{password}".encode()).decode()
headers = {
"Content-Type": "text/plain",
"Authorization": f"Basic {credentials}"
}
response = requests.post(url, headers=headers, data="SELECT * FROM my_table LIMIT 10")
print(response.json())
Pour les applications utilisant les SDK TSDB, transmettez les identifiants via la méthode basicAuth lors de la création d'un objet TSDBConfig.
Pour la spécification complète de l'authentification, consultez la section Spécifier les identifiants utilisateur pour l'authentification. Pour plus de détails sur le format de la requête, consultez la section Contenu de la requête.
Modèle d'autorisation
Types d'autorisations
LindormTSDB définit quatre types d'autorisations :
| Autorisation | Description |
|---|---|
| READ | Requise pour interroger les données des tables. |
| WRITE | Requise pour écrire des données dans les tables. |
| ADMIN | Requise pour gérer les objets de données (créer, modifier ou supprimer des bases de données et des tables). |
| SYSTEM | Requise pour les opérations au niveau de l'instance qui affectent l'ensemble de l'instance. |
Les autorisations effectives d'un utilisateur correspondent à l'union de toutes les autorisations accordées. Par exemple, un utilisateur disposant des autorisations GLOBAL READ et DATABASE READ sur DB1 peut interroger les données de toutes les bases de données.
Étendues des autorisations
Les autorisations sont accordées selon l'une des deux étendues suivantes :
GLOBAL — S'applique à toutes les bases de données et tables de l'instance. Un utilisateur disposant de l'autorisation GLOBAL READ peut interroger n'importe quelle table de séries temporelles dans n'importe quelle base de données.
DATABASE — S'applique à toutes les tables d'une base de données spécifique. Un utilisateur disposant de l'autorisation READ sur
DB1peut interroger n'importe quelle table de séries temporelles dansDB1.
Règles d'autorisation
L'étendue de l'autorisation SYSTEM est toujours GLOBAL. Elle ne peut pas être limitée à une seule base de données.
Seuls les utilisateurs disposant des autorisations GLOBAL ADMIN ou SYSTEM peuvent créer, supprimer ou modifier des utilisateurs, ou leur accorder des autorisations.
Gérer les utilisateurs et les autorisations
Utiliser SQL
Utilisez les instructions SQL suivantes pour gérer les utilisateurs et les autorisations :
| Tâche | Référence SQL |
|---|---|
| Créer un utilisateur | CREATE USER |
| Supprimer un utilisateur | DROP USER |
| Modifier le mot de passe d'un utilisateur | ALTER USER |
| Répertorier tous les utilisateurs | SHOW |
| Accorder des autorisations | GRANT |
| Révoquer des autorisations | REVOKE |
Utiliser le système de gestion de cluster
Les données relatives aux utilisateurs et aux autorisations sont partagées entre LindormTSDB et LindormTable. Si LindormTable est activé, connectez-vous au système de gestion de cluster LindormTable pour gérer les utilisateurs et les autorisations. Pour plus d'informations, consultez la section Se connecter au système de gestion de cluster.
Le système de gestion de cluster prend en charge l'autorisation TRASH, qui n'est pas utilisée dans LindormTSDB.
Si un namespace dans LindormTable porte le même nom qu'une base de données dans LindormTSDB, tout utilisateur ayant reçu des autorisations sur ce namespace aura automatiquement accès à la base de données portant le même nom dans LindormTSDB.
Référence des autorisations
Autorisations requises pour les instructions SQL
Le tableau suivant répertorie les autorisations requises pour exécuter des instructions SQL courantes. Pour identifier les autorisations nécessaires à une instruction spécifique, repérez la ligne correspondante et vérifiez les colonnes marquées d'un ○.
○ = requis, × = non requis.
| Instruction SQL | GLOBAL READ | GLOBAL WRITE | GLOBAL ADMIN | GLOBAL SYSTEM | DATABASE READ | DATABASE WRITE | DATABASE ADMIN |
|---|---|---|---|---|---|---|---|
SELECT...FROM... |
○ | × | × | × | ○ | × | × |
INSERT INTO...VALUES... |
× | ○ | × | × | × | ○ | × |
INSERT INTO...SELECT... |
○ | ○ | × | × | ○ | ○ | × |
DESCRIBE DATABASE |
× | × | ○ | × | × | × | ○ |
CREATE DATABASE |
× | × | ○ | × | × | × | × |
ALTER DATABASE |
× | × | ○ | × | × | × | ○ |
DROP DATABASE |
× | × | ○ | × | × | × | ○ |
SHOW DATABASES |
× | × | ○ | × | × | × | × |
DESCRIBE TABLE |
○ | × | × | × | ○ | × | × |
CREATE TABLE |
× | × | ○ | × | × | × | ○ |
DROP TABLE |
× | × | ○ | × | × | × | ○ |
CREATE USER |
× | × | ○ | ○ | × | × | × |
ALTER USER |
× | × | ○ | ○ | × | × | × |
DROP USER |
× | × | ○ | ○ | × | × | × |
SHOW USERS |
× | × | ○ | ○ | × | × | × |
GRANT |
× | × | ○ | ○ | × | × | × |
REVOKE |
× | × | ○ | ○ | × | × | × |
SHOW PRIVILEGES |
× | × | ○ | ○ | × | × | × |
ALTER SYSTEM |
× | × | × | ○ | × | × | × |
SHOW PARAMETER |
× | × | × | ○ | × | × | × |
L'instruction INSERT INTO...SELECT... nécessite l'autorisation WRITE sur la table de destination et l'autorisation READ sur la table source.
Autorisations requises pour les opérations d'API HTTP compatibles avec OpenTSDB
Toutes les opérations d'API HTTP compatibles avec OpenTSDB nécessitent des autorisations à l'étendue GLOBAL. ○ = requis, × = non requis.
| Opération d'API | GLOBAL WRITE | GLOBAL READ | GLOBAL ADMIN |
|---|---|---|---|
/api/put |
○ | × | × |
/api/query |
× | ○ | × |
/api/query/last |
× | ○ | × |
/api/mput |
○ | × | × |
/api/mquery |
× | ○ | × |
/api/query/mlast |
× | ○ | × |
/api/suggest |
× | ○ | × |
/api/dump_meta |
× | ○ | × |
/api/search/lookup |
× | ○ | × |
/api/ttl |
× | × | ○ |
/api/truncate |
× | × | ○ |