PDA

Vollständige Version anzeigen : DB mit Kennwort mit RT öffnen


Steffen0815
04.04.2013, 14:26
Hallo Wissende,
ich bin auf ein scheinbar unlösbares Problem gestoßen:
Ich möchte eine kennwortgeschützte Datenbankanwendung per Code öffnen.

Eine Übergabe des Passwortes per Kommandozeile wird nicht unterstützt, bleibt also nmW nur OpenCurrentDatabase

Leider ist dieser Befehl in der Runtime-Version nicht einsetzbar.

Folgendes habe ich versucht:
1) Access per Shell öffnen und app übernehmen
-> geht nicht ohne eine Datenbank

2) "HilfsDB" per Shell öffnen und App übernehmen
-> funktioniert, aber nach "CloseCurrentDatabase" ist die App weg

Hat irgendjemand von euch eine geniale Idee?

Smaug
04.04.2013, 15:26
Ich habe zwar noch nicht mit Runtime-Versionen gearbeitet:
geht diese Variante nicht ?
Dim DB As DAO.Database
Dim sMDBFile As String, sPasswort As String
sMDBFile = App.Path & "\MeineDB.MDB"
sPasswort = "geheimer"
Set DB = DBEngine.OpenDatabase(sMDBFile, False, False, ";pwd=" & sPasswort)
Ich nehme mal an dass Du versuchst von einer anderen DB auf die kennwort-geschützte Datenbank zuzugreifen um dort Daten auszulesen - und nicht dass Du das Kennwort zum direkten Öffnen benötigst ?!

Steffen0815
04.04.2013, 16:27
Hallo Smaug,
Dank für die schnelle Antwort. Ich nehme mal an dass Du versuchst von einer anderen DB auf die kennwort-geschützte Datenbank zuzugreifen um dort Daten auszulesen Leider nein.
Ich muss/will die Applikation (Datenbankanwendung) öffnen.

Smaug
05.04.2013, 06:15
wenn Du die kennwortgeschützte Datenbank direkt öffnen möchtest dann würde ich das Passwort nicht per VBA übergeben - das würde die Sicherheit ja wieder komplett aushebeln - oder habe ich etwas mißverstanden ?

Steffen0815
05.04.2013, 08:21
Hallo,
nein genau um diese Sicherheit geht es gerade :) .
Das DB-Kennwort ist nmM die einzige Möglichkeit die Daten einer AccessDB vor dem Zugriff von Außen zu (99%) sichern. Dafür darf der DB-Nutzer aber das Kennwort nicht wissen, sonst kann er die Daten komplett von außen ziehen oder manipulieren.
Deshalb Start mittels StartDB oder in meinem Fall per VB.

Ja und es ist ein reines Runtimeproblem. Mit der Vollversion klappt alles wie ich mir das vorstelle.

JPA
05.04.2013, 08:54
99% sicher ist es auf keinen Fall.
Um ein DB-Kennwort auszulesen ist nicht mal ein Tool notwendig.

Aber vielleicht meindest du mit dem Begriff "99%" einfach nur das eine kleine Hürde vorliegt?!

Gruß
JPA

Smaug
05.04.2013, 09:10
nehmen wir mal an dass das via VBA-Zuweisung so gehen würde wie Du vorschlägst. Dann ist das Kennwort aber irgendwo hinterlegt. Wie schützt Du die Datenbank in der dann das Kennwort hinterlegt ist ? Und wie stellst Du sicher dass nur autorisierte User Zugriff bekommen ? Ist es dann nicht so dass das Problem nur 1 Ebene (Datenbank) nach vorne verlagert wird ?? Oder irre ich mich ?

Steffen0815
05.04.2013, 09:31
Hallo,
nun leider gehts jetzt irgendwie in die falsche Richtung ;) .

@JPA:Um ein DB-Kennwort auszulesen ist nicht mal ein Tool notwendig.Das halte ich für ein absolutes Gerücht :rolleyes: . Das DB-Kennwort ab 2007 ist nmK sicher (nach Stand der Technik).

@Smaug:
Aus einer Start-MDE kannst du kein Kennwort (keinen Code) auslesen. Außerdem nutze ich VB6. Auch eine verschlüsselte INI-Datei ist denkbar. Der Nutzer darf die intern geschützte ZielDB ohne Passworteingabe starten, hat aber keine Chance von Außen zuzugreifen, da er das Passwort nicht kennt. In einer normalen (nur intern geschützten DB) kann sich jeder mit Bordmitteln (Excel, Access, DAO allgemein) Zugang zu den Daten verschaffen.

... und ja die BND kann's vermutlich knacken, aber hier geht es um einen normalen Betrieb.

Steffen0815
13.04.2013, 15:59
Hallo,
nun es scheint wohl doch keine Lösung zu geben.

Ich werde jetzt noch ein Prozent meiner Sicherheit zurückschrauben und das Passwort per SendKeys (bzw. "Ersatzfunktion") übergeben.

JPA
18.04.2013, 20:35
MS schreibt:
"The CreateObject call is not supported in the run-time environment..."
http://support.microsoft.com/kb/295179/en-us

Tatsächlich ist es so, dass CreateObject in der RT umgebung zwar korrekt ausgeführt wird, nur erwartet die RT-Version sofort eine Access-Datei, die jedoch über diesen Weg fehlt.
Daher dann der Fehler "Activex...", weil der Befehl CreateObject zu guter letzt doch nicht vollständig ausgeführt werden konnte.

Ich sehe tatsächlich auch nur die Lösung über sendkeys, die so aussehen könnte:
Dim appID as Variant
appID=Shell("msaccess.exe ""DateiInklPfad.accdb""",vbNormalFocus)
AppActivate appID
SendKeys MeinPasswort & "~", True

Gruß
JPA