[Résolu][Base] Changer un mot de passe de connexion

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
PNE-EdT
Membre lOOyal
Membre lOOyal
Messages : 40
Inscription : 28 mai 2018 08:16

[Résolu][Base] Changer un mot de passe de connexion

Message par PNE-EdT »

Bonjour,

J'ai réalisé un script qui permet de modifier le mot de passe d'accès à une base de données Postgres:

Code : Tout sélectionner

' Chagement du mot de passe 
Sub changerMdP
 	oIam= ThisDatabaseDocument.DataSource.User
 
 	mdp = InputBox(oIam & " : Saisissez votre nouveau mot de passe", "nouveau mot de passe")
 	If mdp = "" Then
      MsgBox("Votre mot de passe est vide, il n'est pas modifié",16,"nouveau mot de passe")
	Else
 	
 	 'voir https://www.postgresql.org/docs/8.1/static/sql-alterrole.html;
	 ' ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

	  	maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
	  
		maRequete = maConnexion.createStatement()
		strSQL =  "ALTER ROLE """ & oIam & """ WITH PASSWORD '" & mdp &"' "
	 
	 	resultat = maRequete.executeUpdate(strSQL)
	 	
	 	maRequete.close
	
	'sauvegarder le mot de passe hu10jmn3
	
	  maConnexion.close
	  ThisDatabaseDocument.DataSource.User = ""
	  
	  
	End if	 

End Sub
J'ai associé ce script à un bouton d'un formulaire.
Le mot de passe de l'utilisateur est effectivement changé.

Mais, suite au changement de mot de mot de passe, j'ai l'erreur à l'ouverture du formulaire:
Statut SQL: FATAL: authentification par mot de passe échouée pour l'utilisateur « davide »
FATAL: authentification par mot de passe échouée pour l'utilisateur « davide »
Code d'erreur: 1
Couldn't establish database connection to 'sdbc:postgresql:dbname=referentiel


Et je n'arrive pas à revenir sur la fenêtre de saisie du mot de passe. le nom et ancien mot de passe reste en mémoire mais je ne sais pas l'effacer.

Cependant le fait d'ajouter

Code : Tout sélectionner

  ThisDatabaseDocument.DataSource.User = ""  
à la fin de la fonction permet de venir à la fenêtre de connexion mais après affichage du message d'erreur.

Y a-t-il moyen de supprimer ce message d'erreur?
J'ai essayé en vain de faire une déconnexion.

Merci de votre aide
Je peux fournir le fichier odb bien que je doute de l'apport de celui-ci car il est lié à une base sur un seveur local. Il ne comporte qu'un formulaire avec un bouton et ce script.

Cordialement
A+.
Dernière modification par micmac le 20 août 2018 15:17, modifié 2 fois.
Raison : Ajout de la coche verte
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25182
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Changer un mot de passe de connexion

Message par Dude »

Forcément si tu modifies le mot de passe dans PostgreSQL, il faut faire de même pour l'ODB.
PNE-EdT
Membre lOOyal
Membre lOOyal
Messages : 40
Inscription : 28 mai 2018 08:16

Re: [Base] Changer un mot de passe de connexion

Message par PNE-EdT »

Merci, bien sûr.
Mais je n'arrive pas à faire apparaitre immédiatement la fenêtre de connexion.
Si je vais sur un autre formulaire, j'ai le message d'erreur de même que si je fais une requête sur un autre bouton du formulaire.
Et même si je ferme la base.

Mon souhait serait d'enregistrer le nouveau de passe quitte à faire apparaitre la fenêtre de connexion.
Je pense qu'il me manque la façon de fermer proprement la connexion: le nom d'utilisateur reste affiché dans les propriétés de la base de données (menu Édition/Base de données/ Propriétés...)

Merci
Cordialement
A+.
LibreOffice 7.0.3.1 sous Windows 10
LOo 6.3.1.2 sous Windows 10 sur un ancien poste
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25182
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Changer un mot de passe de connexion

Message par Dude »

De ce que je peux en dire et sous réserve que :
  1. j'utilise comme client AOO 4.1.5 sous Windows 7
  2. le SGBD utilisé est MySQL 8.0.12
  3. la connexion se fait au moyen du pilote natif SDBC 1.2.0
Modifier le mot de passe utilisateur dans le SGBD puis dans l'ODB fonctionne sans problème :

Code : Tout sélectionner

Sub ChangePasse
    sNeoMdp = "passe"
    oBase = ThisDatabaseDocument
    sUrl = oBase.URL
    sNom = oBase.DataSource.User
    sPasse = oBase.DataSource.Password
    oDC = CreateUnoService("com.sun.star.sdb.DatabaseContext")
    oSrc = oDC.getByName(sUrl)
    oDB = oSrc.getConnection(sNom,sPasse)
    oCnx = oDB.createStatement()
    sReq = "ALTER USER USER() IDENTIFIED BY '"& sNeoMdp &"'"
    sRet = oCnx.executeUpdate(sReq)
    sReq = "SELECT 1" 'Nécessaire d'après la doc MySQL 6.3.7 Password Management
    sRet = oCnx.executeQuery(sReq)
    oBase.DataSource.Password = sNeoMdp
    oCnx.dispose
End Sub
PNE-EdT
Membre lOOyal
Membre lOOyal
Messages : 40
Inscription : 28 mai 2018 08:16

Re: [Résolu][Base] Changer un mot de passe de connexion

Message par PNE-EdT »

Merci beaucoup,

En fait la ligne importante dans le code précédent est

Code : Tout sélectionner

ThisDatabaseDocument.DataSource.User = sNeoMdp
[/b]

Il ne faut pas faire
ThisDatabaseDocument.DataSource.User = ""
Ni réaffecter "oBase.DataSource.User"

Car le nom de l'utilisateur et son mot de passe sont gardés en mémoire.

Sinon on a :
"Statut SQL: fe_sendauth: no password supplied
Code d'erreur: 1
Couldn't establish database connection to 'sdbc:postgresql:dbname=... hostaddr=.... port=...'
fe_sendauth: no password supplied"


Le fait de réattribuer "ThisDatabaseDocument.DataSource.User = sNeoMdp" au nouveau de passe évite la boite de connexion et l'erreur.


Pour info :
j'utilise Windows 10 ( et aussi Windows 7)
le SGBD utilisé est PostgreSQL
la connexion se fait au moyen du pilote natif

Merci.
Cordialement
A+.
LibreOffice 7.0.3.1 sous Windows 10
LOo 6.3.1.2 sous Windows 10 sur un ancien poste