Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Wie kann man Tabellen verstecken





Frage

Hallo AccessUser ! Ich habe folgendes Problem, ich habe eine Accessanwendung geschrieben, die aus einem Frontend und Backend besteht. Das Frontend habe ich eine MDE umgewandelt um eine Änderung zu verhindern. Das BAckend ist allerdings noch offen und kann somit von Jedem Nutzer mit Schreib-und Leserechten auf das File ausgelesen und direkt geändert werden. Wie kann ich den Zugriff auf diese Tabellen verhindern. (Ich arbeite mit einer mdw Datei, die nicht der system.mdw entspricht) Wer kann helfen ??? Danke im voraus ZAR41

Antwort 1 von JohnnyLoser

Hallo ZAR41!

Naja, es ist schon etwas merkwürdig einerseits den Zugriff auf Tabellen erlauben zu müssen, andererseits aber verbieten zu wollen.

Hier einige Möglichkeiten:

1. Tabellen ausblenden

Klicke mit der rechten Maustaste auf die Tabelle, öffne Eigenschaften und wähle Ausgeblendet. Nun wird das Objekt nicht mehr im Datenbankfenster angezeigt.

Der User hat allerdings die Möglichkeit, über Optionen einzustellen, ob er ausgeblendete Objekte sehen will oder nicht.

2. Dem User die Berechtigungen zur Ansicht der Tabellen entziehen

Klingt im ersten Moment ziemlich unsinnig, da er ja dann auch in Deinem Frontend keine Berechtigung hat, ist aber durch eine einfache SQL-Erweiterung zu umgehen.

Sofern alle Deine Abfragen und Source-Eigenschaften in Formularen und Berichten auf fest definierten SQL-Statements bestehen, kannst Du den Zusatz 'WITH OWNERACCESS OPTION' an den SQL-String anhängen. Dies bewirkt, daß die Abfrage mit den Eigentümerrechten geöffnet wird und der User in der Ansicht die ihm zugelassenen Felder sehen kann.

Auch Änderungen sind möglich über Execute-Statements, die diesen Zusatz enthalten.

Nicht möglich ist es, wenn durch den User die Source-Eigenschaft eines Objektes durch ein Ereignis neu zugewiesen wird.


Dies ist übrigens meine bevorzugte Methode, dem User das Öffnen der Tabellen zu unterbinden, setzt allerdings voraus, daß man beim Design der Datenbank von Anfang an diesen Punkt berücksichtigt, um sich später die Arbeit des Änderns zu ersparen.

Gruß

Johnny

Antwort 2 von ZAR41

HAllo Johnny,

ich werde es mal "with owneracess option" probieren. Allerdings weiß ich leider immer noch nicht wie ich damit das Backend dicht mache.
Wenn ein User das Backend mit Access öffnet, ohne Mitglied in der Benutzer mdw zu sein, hat er Adminrechte auf das Backend und kann tun und lassen was er will. Ist doch richtig, oder ??

Vielleicht kannst du mir da etwas konkreter helfen.

Gruß
ZAR 41

Antwort 3 von JohnnyLoser

Hi ZAR41!

Wenn ich Dich richtig verstanden habe, ist der Eigentümer der Backend.mdb - und wahrscheinlich auch der Frontend.mdb - der User Admin, der standardmäßig von Access installiert wird. Dies ist natürlich schon eine schlechte Voraussetzung für eine geschützte Datenbank.

Am besten ist es, eine eigene MDW zu erzeugen, darin den User ZAR41 anzulegen, der die Administratorenrechte besitzt und dem Admin alle Rechte zu entziehen.

Nun kannst Du als ZAR41 frei über die Datenbank verfügen, ohne daß Dir irgendein 'Admin' dazwischenfunkt.

Du entziehst zusätzlich der Gruppe Benutzer alle Berechtigungen, bis auf das Öffnen der Datenbank.

Dann legst Du einen User, z.B. DUM23 an, den Du der Gruppe Benutzer zuordnest.

DUM23 kann jetzt die Backend.mdb öffnen, doch beim Öffnen einer Tabelle wird er mit dem Spruch 'Sie haben keine Leseberechtigung...' begrüßt.

Bei der Frontend.mdb kannst Du der Gruppe Benutzer alle Rechte geben, die sie zum Ausführen von Abfragen und Makros, Öffnen von Berichten und Formularen benötigen. Die eingebundenen Tabellen Deiner Backend.mdb können sie auch hier nicht einlesen.

Jetzt erstellst Du z.B. eine Abfrage im Frontend als ZAR41 mit folgendem SQL-String:
"SELECT [Feld1], [Feld2] FROM [eingebundene Tabelle1] WITH OWNERACCESS OPTION;"

Öffen das Frontend als DUM23 und versuche die eingebundene Tabelle zu öffnen -> es funzt nicht.

Öffne die zuvor von ZAR41 erstellte Abfrage und Du siehst, daß DUM23 auch ohne Leseberechtigung auf die eingebundene Tabelle, zumindest die definierten Felder 1 und 2 sehen - UND ÄNDERN - kann. Er hat solange die Abfrage in der Datenblattansicht geöffnet ist alle Rechte von ZAR41, selbst Löschen. Dies kannst Du allerdings vermeiden, wenn Du der Gruppe Benutzer auf die Abfrage nur Leserechte einräumst.

Basierend auf diesen Abfragen kannst Du Deine Formulare erstellen.

In den Formularen kannst Du auch ComboBoxen oder ListBoxen verwenden, die als Source einen ähnlichen SQL-String besitzen. Einziger Makel: Falls es notwendig ist, kannst Du diesen Source nicht über eine Prozedur im Modul neu zuweisen.


Falls Du noch Fragen hast, kannst Du mir auch mailen.

Gruß

Johnny




Antwort 4 von JohnnyLoser

Hi ZAR41!

Noch 'ne Idee:

In einem meiner kleinen Programme sollten die User (natürlich automatisch) auch die Möglichkeit haben, Verknüpfungen wieder herzustellen.

Habe ich wie folgt gelöst:

Im Modul CommonVar
Public OwnerJet As Workspace
Public OwnerDb As Database
Global Const AppName = "FRONTEND.MDB"
Public AppDir As String

Im Modul CommonFunctions

Function AppStart() 'wird über AutoExec-Makro aufgerufen

AppDir = "C:\Daten\" 'hole ich mir selbstverständlich aus einem Config-File, da es ja nicht fix ist
Set OwnerJet = DBEngine.CreateWorkspace("OwnerRights", "Mein Username", "Mein Passwort", dbUseJet)
Workspaces.Append OwnerJet
Set OwnerDb = OwnerJet.OpenDatabase(AppDir & AppName)


Im Formular beim Click eines Such-Button:

Sub BT_Search_Click()
Dim rs As Recordset
Set rs = OwnerDb.OpenRecordset("SELECT * FROM Tabelle")


Funzt natürlich auch mit WITH OWNERACCESS OPTION, bietet aber die Möglichkeit, zusätzlich Tabellen neu einzubinden oder zu definieren.


I hope it helps you!

Johnny

Antwort 5 von ZAR41

Hallo Johnny,

danke für deine Tipps. Man sieht ich spreche mit einem Profi.
Ich bin noch nicht so richtig in Access vertieft. Ich kann zwar die wichtigsten VBA Befehle, aber so richtig tiefgreifend sind meine Kenntnisse noch nicht. Aber ich hoffe, daß mein Problem trotzdem auf diese Weise geklärt werden kann.
Soweit so gut, allerdings muß ich mein Problem noch etwas konkretisieren. Wie ich schon geschrieben habe, besteht meine Anwendung aus einem Frontend, das ich über Befehlzeilenmodus aufrufe und dabei eine Anwender.mdw einbinde. Damit ich den Benutzern die entsprechenden Rechte zuweisen kann. Soweit bin ich ja schon.
Das Frontend greift mit verschiedenen Abfragen auf das (Allerdings nicht SQL) auf die verknüpften Daten im Backend zu. Das funktioniert auch ganz gut .
Nun aber zu dem Problem, das sich mir stellt. Bei mir handelt es sich um eine Netzwerkumgebung und die User haben auf ihrem eigenen Rechner Access lokal installiert. Wenn der User nun zuerst sein lokales Access aufruft, und damit die System.mdw nutzt, hat der entsprechende Adminrechte. Wenn er nun das Backend öffnet kann er auch alle Daten auslesen und verändern wie er möchte. Also ich muß versuchen das Backend irgendwie an die Anwender.mdw zu koppeln oder Passwort schützen. Was allerdings wiederum einigen Aufwand erfordert, den ich noch nicht durchblickt habe.

Vielleicht hast du einen noch einen guten Tip auf Lager, vielleicht geht auch einer deiner schon geschriebenen Tips, dann lass es mich bitte wissen.

Gruß
ZAR41

Antwort 6 von JohnnyLoser

Hi ZAR41!

Ich gehe davon aus, Du hast das Backend als User Admin einer Standard-Access-Installation erstellt. Schlußfolgernd ist Admin Eigentümer der Datenbank und hat somit alle Rechte.

1. Log Dich als ZAR41 ein und erstelle eine gesicherte Kopie Deines Backends (In A97 über Extras|Zugriffsrechte|Benutzer-Datensicherheits-Assistent...)
Du erhältst eine 1:1-Kopie mit ZAR41 als Eigentümer.

2. Öffne die Kopie und entziehe dem User Admin und der Gruppe Administratoren alle Rechte inkl. des Öffnens der Datenbank.

3. Ersetze Dein Backend - nach vorhergehendem Backup - mit Deiner Sicherheitskopie.

4. Erzeuge in Deiner MDW eigene Gruppen, denen Du die Rechte zuweist, die Du für richtig hältst.

Es müßte mit dem Teufel zugehen, wenn Deine User jetzt noch die Datenbank öffnen können.

Bis dahin

Johnny


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: