
Guide des Connexions à la Base de Données
database-connections-fr.RmdIntroduction
Ce guide explique comment se connecter aux bases de données CafriplotsR, gérer les identifiants de manière sécurisée et résoudre les problèmes de connexion courants.
CafriplotsR utilise deux bases de données PostgreSQL
distinctes : 1. Base de données principale
(plots_transects) : Contient les données de parcelles,
sous-parcelles et arbres individuels 2. Base de données
taxonomique (rainbio) : Contient les informations
taxonomiques et les traits au niveau de l’espèce
Démarrage Rapide
Première Connexion
library(CafriplotsR)
# Se connecter à la base de données principale (demandera les identifiants)
con_main <- call.mydb()
# Se connecter à la base de données taxonomique (utilise les mêmes identifiants)
con_taxa <- call.mydb.taxa()
# Tester vos connexions
print_connection_status()Lors de la première utilisation, vous serez invité à entrer :
- Nom d’utilisateur : Votre nom d’utilisateur de base de données
- Mot de passe : Votre mot de passe de base de données
Les identifiants sont mis en cache en mémoire pour la durée de votre session R.
Fonctions de Connexion
Base de Données Principale : call.mydb()
Utilisez ceci pour toutes les opérations sur les données de parcelles, sous-parcelles et arbres individuels.
Base de Données Taxonomique : call.mydb.taxa()
Utilisez ceci pour les requêtes taxonomiques et les traits d’espèces.
# Se connecter à la base de données taxonomique
con_taxa <- call.mydb.taxa()Important : La base de données taxonomique est en lecture seule pour la plupart des utilisateurs. Les opérations d’écriture sont réservées aux administrateurs.
Gestion des Identifiants
Option 1 : Invites Interactives (Par Défaut)
L’approche la plus simple - entrez les identifiants lorsque demandé :
con <- call.mydb()
# Entrez le nom d'utilisateur : [votre_utilisateur]
# Entrez le mot de passe : [votre_mot_de_passe]Avantages : Sécurisé, pas de mots de passe stockés Inconvénients : Doit entrer les identifiants à chaque nouvelle session R
Option 2 : Variables d’Environnement (Persistant)
Stockez les identifiants dans votre fichier .Renviron
pour un chargement automatique :
# Exécuter une fois pour configurer
setup_db_credentials()
# Suivez les invites pour entrer le nom d'utilisateur et le mot de passePuis utilisez avec use_env_credentials = TRUE :
con <- call.mydb(use_env_credentials = TRUE)Attention : Les identifiants sont stockés en
texte clair dans ~/.Renviron. N’utilisez
ceci que sur votre ordinateur personnel et sécurisé.
Pour supprimer les identifiants stockés :
Option 3 : Paramètres Directs (Non Recommandé)
Vous pouvez passer les identifiants directement, mais ce n’est pas recommandé car les mots de passe peuvent être visibles dans votre code ou historique :
# Évitez ceci dans le code partagé !
con <- call.mydb(user = "monutilisateur", pass = "monmotdepasse")Nettoyage des Connexions
Pourquoi Nettoyer les Connexions ?
Les connexions à la base de données sont des ressources limitées. Ne pas les fermer peut causer :
- Épuisement des connexions : La base de données refuse les nouvelles connexions
- Fuites de mémoire : Les connexions inutilisées consomment des ressources
- Connexions périmées : Les anciennes connexions peuvent expirer et causer des erreurs
Quand Nettoyer
Essayez de nettoyer les connexions quand :
- Vous avez fini de travailler avec la base de données
- Avant de fermer R/RStudio
- Lors du changement d’utilisateur
Comment Nettoyer
# Fermer toutes les connexions et effacer les identifiants en cache
cleanup_connections()Cette fonction :
- Ferme la connexion à la base de données principale
- Ferme la connexion à la base de données taxonomique
- Efface les identifiants en cache de la mémoire
Vérification du Statut de Connexion
Vérification Rapide du Statut
# Voir le statut actuel des connexions
print_connection_status()Exemple de sortie :
-- Statut des Connexions à la Base de Données --
v Base principale : Connecté à plots_transects en tant que monutilisateur
v Base taxonomique : Connecté à rainbio en tant que monutilisateur
Vérification de l’Accès aux Données (Sécurité au Niveau des Lignes)
La base de données utilise la sécurité au niveau des lignes (RLS) pour contrôler quelles parcelles chaque utilisateur peut accéder.
Voir Vos Parcelles Accessibles
con <- call.mydb()
# Voir quelles parcelles vous pouvez accéder
result <- get_user_accessible_plots(con, "votre_utilisateur")
print(result)
# Obtenir uniquement les IDs de parcelles comme vecteur
plot_ids <- result$plot_ids[[1]]
print(plot_ids)Voir Vos Politiques
# Voir toutes les politiques pour un utilisateur
list_user_policies(con, user = "votre_utilisateur")
# Voir toutes les politiques sur une table
list_user_policies(con, user = NULL, table = "data_liste_plots")Comprendre les Niveaux d’Accès
Les politiques peuvent accorder différentes opérations :
- SELECT : Accès en lecture seule
- INSERT : Peut ajouter de nouveaux enregistrements
- UPDATE : Peut modifier les enregistrements existants
- DELETE : Peut supprimer des enregistrements
- ALL : Accès complet (SELECT, INSERT, UPDATE, DELETE)
Dépannage
Problèmes Courants et Solutions
“Connexion refusée” ou “Impossible de se connecter”
Causes :
- Problèmes réseau
- Le serveur de base de données est arrêté
- Le pare-feu bloque la connexion
Solutions :
- Vérifiez votre connexion internet
- Réessayez dans quelques minutes
- Contactez l’administrateur de la base de données
“Échec d’authentification”
Causes :
- Mauvais nom d’utilisateur ou mot de passe
- Le compte n’existe pas
Solutions :
# Réinitialiser les identifiants et réessayer
con <- call.mydb(reset = TRUE)“Erreur SSL SYSCALL : EOF détecté”
Causes :
- La connexion a été fermée mais est encore utilisée
- Se produit généralement après la fermeture d’une application Shiny
Solutions :
# Nettoyer et se reconnecter
cleanup_connections()
con <- call.mydb()“Trop de connexions”
Causes :
- Plusieurs connexions non fermées
- D’autres utilisateurs consomment les connexions
Solutions :
# Nettoyer vos connexions
cleanup_connections()
# Attendre et réessayer
Sys.sleep(5)
con <- call.mydb()Délai d’attente de requête ou “Connexion perdue”
Causes :
- Requête très volumineuse
- Instabilité réseau
- Surcharge du serveur
Solutions :
Le package inclut une nouvelle tentative automatique pour les échecs transitoires :
# func_try_fetch réessaie automatiquement les requêtes échouées
result <- func_try_fetch(con, "SELECT * FROM grande_table")“Permission refusée” ou résultats vides
Causes :
- La sécurité au niveau des lignes restreint l’accès
- L’utilisateur n’a pas de politique pour les parcelles demandées
Solutions :
- Vérifiez vos parcelles accessibles :
get_user_accessible_plots(con, "votre_utilisateur")- Contactez l’administrateur pour demander l’accès à des parcelles supplémentaires
Réinitialisation Complète
Si vous avez des problèmes persistants, faites une réinitialisation complète :
# 1. Nettoyer toutes les connexions
cleanup_connections()
# 2. Redémarrer la session R
.rs.restartR()
# 3. Se reconnecter à neuf
library(CafriplotsR)
con <- call.mydb(reset = TRUE)Résumé des Bonnes Pratiques
À Faire
-
Toujours appeler
cleanup_connections()avant de fermer R -
Utiliser
print_connection_status()pour vérifier les connexions -
Vérifier votre accès aux parcelles avec
get_user_accessible_plots()si les requêtes retournent vide - Utiliser les pools de connexions dans les applications Shiny
-
Exécuter
db_diagnostic()lors du dépannage -
Stocker les identifiants dans
.Renvironuniquement sur des ordinateurs personnels sécurisés
À Ne Pas Faire
- Ne pas coder en dur les mots de passe dans les scripts
- Ne pas partager les identifiants avec d’autres
- Ne pas laisser les connexions ouvertes indéfiniment
- Ne pas ignorer les erreurs SSL - nettoyer et se reconnecter
- Ne pas créer plusieurs connexions quand une seule suffit
Flux de Travail Recommandé
library(CafriplotsR)
# 1. Se connecter
con <- call.mydb()
# 2. Vérifier la connexion
print_connection_status()
# 3. Vérifier votre accès si nécessaire
get_user_accessible_plots(con, "votre_utilisateur")
# 4. Faire votre travail
# ... requêtes, mises à jour, etc. ...
# 5. Nettoyer quand terminé
cleanup_connections()Obtenir de l’Aide
Si vous rencontrez des problèmes non couverts ici :
- Exécutez
db_diagnostic()et notez la sortie - Vérifiez vos parcelles accessibles avec
get_user_accessible_plots() - Contactez l’administrateur de la base de données avec :
- La sortie du diagnostic
- Le message d’erreur exact
- Ce que vous essayiez de faire