❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Automatische Anmeldung an der DB

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Dami
Beiträge: 24
Registriert: Di 20. Jan 2015, 09:33

Automatische Anmeldung an der DB

Beitrag von Dami » Fr 12. Feb 2016, 08:57

… um das Thema aus
http://www.libreoffice-forum.de/viewtop ... 10&t=15855
ein wenig anders auszurollen und unabhängig von irgendwelchen Sicherheitsaspekten,
ist es möglich sich mit der DB (zB.: Postgres) durch ein Makro
mit Passwort und Userkennung zu verbinden/anzumelden

Code: Alles auswählen

SUB open_main_form
	oController= ThisDatabaseDocument.CurrentController
	IF oController.DataSource.IsPasswordRequired THEN
	    oController.DataSource.User = "User"
	    oController.DataSource.Password = "Password"
	END IF
	IF NOT ( oController.isConnected() ) THEN
		oController.connect()
	END IF
	ThisDatabaseDocument.formdocuments.getbyname("Start").open
END SUB
... dem Ereigniss "Dokument öffnen" zugewiesen, öffnet es das Formular "Start"
wie hier schon mehrfach beschrieben

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Automatische Anmeldung an der DB

Beitrag von gogo » Fr 12. Feb 2016, 10:16

klar, aber Du musst über die (angemeldete) Datenquelle gehen.

die zentralen Befehle wären:

Code: Alles auswählen

DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Datenbankname")
DataSource.GetConnection("MeinName","pAssWoRt")
Ein etwas längeres Listing:

(Wesentlich sind die Zeilen "DataSource.USER = sUser" und "DataSource.Password = sPasswd")
Einen Passwort-Dialog brauchst Du auch noch außer Du möchtest immer mit demselben Benutzernamen und Passwort verbinden, dann kannst Du den ganzen Abschnitt von "' holt zumindest irgendwas aus der Verbindung" bis "DataSource.Password = sPasswd" weglassen und "goConnection = DataSource.GetConnection(sUser,sPasswd)" durch "goConnection = DataSource.GetConnection("Benutzer","geheimesPasswort")" ersetzen.
Die Zuweisung der Connection zur globalen Variable goConnection hat den Vorteil, dass Du diese später nutzen kannst, und ein SQL-Statement dann einfach mit Statement=goConnection.createStatement erzeugt wird.

Code: Alles auswählen

Global goConnection
Global go_Dlg_Passwort

sub DatenbankStarten(optional oEvent)

	if not VerbindungHerstellen("NameDerRegistriertenDatenbank") then
		if not ismissing(oEvent) then 
			on error resume next
				' eigene Sub in einem anderen Modul, das die Datenbank "von aussen" korrekt schliesst
				call SUB_DatenbankSchliessen(oEvent, 1500)
			on error goto EH 
			msgbox "Verbindung zur Datenbank konnte nicht hergestellt werden, die Anwendung wird beendet!"
		else
			msgbox "Verbindung zur Datenbank konnte nicht hergestellt werden! Bitte die Anwendung manuell beenden!"
		end if
	end if

end sub

function VerbindungHerstellen(sMyRegDB)
	on erhror goto EH
	dim DatabaseContext, DataSource, Connection
	dim InteractionHandler
	dim sUser, sPasswd
	
	VerbindungHerstellen = false

	DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
	if NOT DatabaseContext.hasByName(sMyRegDB) then
		msgbox "Datenquelle " & sMyRegDB & " wurde NICHT gefunden! - daher Abbruch!"
		exit function
	end if
	DataSource = DatabaseContext.getByName(sMyRegDB)
	
	' holt zumindest irgendwas aus der Verbindung1
	sUser=cstr(DataSource.USER)
	sPasswd=cstr(DataSource.Password)
	if sPasswd = "" then sUser=""
	
	PasswortDialog:
	if NOT DLG_Passwort(sUser, sPasswd) Then exit function
	if sUser = "" OR sPasswd = "" then 
		if msgbox("Benutzername und Passwort muessen angegeben werden! - Noch eine Versuch?", 4) = 6 then
			goto PasswortDialog
		else
			exit function
		end if
	end if

	DataSource.USER = sUser
	DataSource.Password = sPasswd
	goConnection = DataSource.GetConnection(sUser,sPasswd)
	
	if DataSource.getConnection(DataSource.USER, DataSource.Password).isClosed = true then
		msgbox sMyRegDB & "-Verbindung ist derzeit - warum auch immer - Schrott!"
		exit function
	end if

	VerbindungHerstellen = true
	exit function
	
	EH:
	call EH
	if msgbox("Verbindung zu " & sMyRegDB & " schliessen?",4) = 6 then Connection.release

end function

Function DLG_Passwort(sUser, sPasswd, optional sDatenquelle)
	dim DialogWert, i
	DLG_Passwort = false
	i=0
	If (Not ThisComponent.DialogLibraries.isLibraryLoaded("Standard")) Then 
	    ThisComponent.DialogLibraries.LoadLibrary("Standard")
	End If
	
	go_Dlg_Passwort = CreateUnoDialog(Dialoglibraries.Standard.Dlg_Passwort)

	' manchmal dauert's	ein bisschen bis der Dialog geladen wurde - daher diese Schleife
	do while (NOT isobject(go_Dlg_Passwort)) AND ( i < 100 )
		i=i+1
		wait 100
	loop

	go_Dlg_Passwort.GetControl("BenName").setText(sUser)
	go_Dlg_Passwort.GetControl("Passwd").setText(sPasswd)
	
	DialogWert = go_Dlg_Passwort.execute()
	if DialogWert = 1 then ' ueberprueft ob ueberhaupt etwas ausgewaehlt wurde
		DLG_Passwort = true
		sUser   = go_Dlg_Passwort.GetControl("BenName").Text
		sPasswd = go_Dlg_Passwort.GetControl("Passwd").Text
	end if
	go_Dlg_Passwort.dispose()
end Function
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Automatische Anmeldung an der DB

Beitrag von RobertG » Fr 12. Feb 2016, 17:00

Hallo *,

das folgende Verfahren geht auch ohne angemeldete Datenbank:

Code: Alles auswählen

oDatasource = thisDatabaseDocument.CurrentController.DataSource
oConnection = oDatasource.getConnection("username","password")
Datenbanken melde ich in der Regel nicht an. Und da sowieso beim Öffnen des Dokumentes noch keine Verbindung für die Base-Datei besteht, kann ich mir eine IF-Abfrage doch sparen, oder?
Abgesehen davon: Wenn ich Nutzername und Passwort bereits in die Datenbank in den Makrocode rein schreibe, dann sollte ich den Makrocode wenigstens durch ein Passwort sichern. Ich weiß nicht, wie das einmal funktioniert hat. Ich habe nur davon gelesen, dass der Passwortschutz zur Zeit defekt ist.
Folgerung: Ich kann mir auch gleich das Passwort für den entsprechenden Nutzer in der Datenbank sparen ...

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Automatische Anmeldung an der DB

Beitrag von gogo » Fr 12. Feb 2016, 17:40

Dem CurrentController vertraue ich nicht - bei falschen Passworteingaben und sonstigen Verbindungsproblemen war das immer zu instabil - kann aber sein, dass er bei der embedded HSQLDB gut funktioniert.
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Automatische Anmeldung an der DB

Beitrag von RobertG » Fr 12. Feb 2016, 19:32

Hallo gogo,

ich habe das mit einer externen MariaDB getestet, die eben so eine Passworteingabe erforderte. Nur einmal getestet, nicht intensiv. Ich würde sowieso keine Passwörter in der Datenbankdatei hinterlegen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Re: Automatische Anmeldung an der DB

Beitrag von scientific » Di 1. Mär 2016, 15:55

RobertG hat geschrieben:Hallo gogo,

ich habe das mit einer externen MariaDB getestet, die eben so eine Passworteingabe erforderte. Nur einmal getestet, nicht intensiv. Ich würde sowieso keine Passwörter in der Datenbankdatei hinterlegen.

Gruß

Robert
Ich steh auch grad vor dem Problem, dass ich für ein Skript, welches Outlook- oder auch Google-Calendar-Events bearbeitet irgendwo Credentials hinterlegen muss...

LO-Base ruft ein Python-Skript auf, welches sich dann gegen den Outlook- bzw. Google-Server authentifiziert...

Wie macht man so etwas "richtig"?

Das Eintragen/Ändern von Events auf einen Exchange-Server klappt schon. In die Google-Api arbeite ich mich gerade ein.

Aber ich hab echt keine Ahnung, wie ich das in LO korrekterweise mit der Authentifizierung löse, sodass ich die Login-Credentials nicht im Klartext hinterlegen muss (derzeit liegen die probehalber in einer Tabelle in der hsqldb)

lg scientific


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten