PDA

Vollständige Version anzeigen : Benutzerrechte


sowosamma
23.07.2007, 14:45
Hallo zusammen,

ich muß mich leider mit dem Thema 'Benutzerrechte' auseinandersetzen. Hierzu hab ich im Forum bereits fleißg gesucht und gelesen. Bin zwar etwas schlauer geworden, aber eine richtige Lösung habe ich noch nicht gefunden.

Meine jetzige DB wird nur von meinen zehn Kollegen und mir genutzt. Jeder hat die selben Berechtigungen (Schreiben, Lesen, Abfragen ausführen, Berichte anschauen etc.). Da das Frontend eine MDE ist, im Startup diverse Funktionen deaktiviert sind 'Display Database Window', 'Allow Default Shortcut Menus' etc. können die Kollegen auch nur auf das zugreifen, was ich erlaube. Alle Funktionen des Frontends werden mit einer selbsterstellten Menüleiste aufgerufen. Somit war das Thema 'Benutzerrechte' in Access für mich eher ein Randthema.

Die DB soll nun aber erweitert werden, so daß neben uns auch andere Kollegen auf Daten zugreifen können (z.B. Geschäftsleitung, Risiko-Controlling und Kollegen aus den Filialen...). Und hier kommt das Problem: Die Geschäftsleitung darf natürlich Auswertungen sehen, die für andere tabu sind. Ebenso das Risiko-Controlling. Dann sollen die Kollegen in den Filialen nur ihre Kunden (keine Fremdkunden) anschauen dürfen....

Kann man sowas mit Benutzerrechten in Access steuern? Oder soll ich lieber bei jedem Öffnen des Frontends die Menüleiste anhand des Nutzers mit Environ$("username") erstellen. Also im Menü unter Reporting ist für den Geschäftsführer der Punkt 'Erträge ldf. Jahr nach NDL' aktiviert, während er bei den anderen Usern deaktivert ist bzw. garnicht erscheint.

Vielleicht hat jemand Erfahrung oder nen Tip wie man mit sowas umgeht. Würde ungern das Rad neuerfinden, wenn es eine Möglichkeit in Access gibt.

Afk009
23.07.2007, 14:59
du kannst z.B. eine Tabelle erstellen, wo du die User reinschreibst, Windows ID und die Berechtigung dazu. 1,2,3 usw. Tabellenname tblUser
erstellst in dem Hauptformular ein unsichtbares Textfeld was dann auf dem Hauptformular ein unsichtbares Textfeld dem du in Eigenschaften: beim Standartwert Umgebung("USERNAME") reinschreibst.
diese Textfeld kannst du User nennen.
in diesem Feld wird die WindowsID angezeigt.
fühlst dann folgdes Code in beim Anzeigen


Private Sub Form_Current()

Dim rs As DAO.Recordset
Dim sUserName As String

sUserName = Environ("Username")
Set rs = CurrentDb.OpenRecordset("SELECT tblUSER.WinID, tblUSER.Berechtigung FROM USER WHERE tblUSER.WinID = '" & sUserName & "';")
If rs.EOF = True Then

MsgBox "Sie haben keine Berechtigung für diese Datenbank!", vbOKOnly, "Berechtigungshinweis!"
DoCmd.Quit

Else

Select Case rs!Berechtigung

Case Is = 1

Me!deinButton.Enabled = True 'Hier Anweisung was geschehen soll wenn Berechtigung 1 ist
' dann aktiviere AB button

Case Is = 2

Me!einButton.Enabled = True 'Hier Anweisung was geschehen soll wenn Berechtigung 1 ist
' dann aktiviere AB button

Case Is = 3

Me!einButton.Enabled = False 'Hier Anweisung was geschehen soll wenn Berechtigung 2 ist
' dann normal einloggen



End Select

End If
rs.Close
Set rs = Nothing


End Sub

setzt alle Buttons auf Aktiviert nein, und bei "CASE is" kannst du alle Buttons je nach Berechtigung aktivieren lassen.

Gruß,
Iggy

Prian0815
23.07.2007, 14:59
Hi Andi, Kann jetzt hier nur für Acc97 sprechen, han ansonsten mit dem Thema noch keinerlei Erfahrung. Bei Acc97 sind wir so vorgegangen: Wir haben Die Benutzer- und Grupenrechte benutzt. Im Frontend haben wir dann aber trotzdem mit ua. Code abgefragt, und den User in bestimmte Bereiche nicht reingelassen. Durch Deaktivierung bzw. Unsichtbarschaltung der jeweiligen Buttons im H_F. Hier der Code. Hoffe das hilft dir weiter.

Function CheckDbSecDeleteData(strTabelle As String) As Boolean
Dim dbs As Database, ctr As Container, doc As Document

On Error GoTo CheckDbSecDeleteData_Err

'Der Benutzer darf Datensätze löschen?
' Return reference to current database.
Set dbs = CurrentDb
' Return reference to Tables container.
Set ctr = dbs.Containers("Tables")
Set doc = ctr.Documents(strTabelle)
ctr.UserName = CurrentUser

' Check if AllPermissions property.
If (doc.AllPermissions And dbSecDeleteData) = dbSecDeleteData Then
CheckDbSecDeleteData = True
Else
CheckDbSecDeleteData = False
End If
Set dbs = Nothing

Exit_CheckDbSecDeleteData:
Exit Function

CheckDbSecDeleteData_Err:
If Err.Number <> 0 Then
MsgBox Err.Number & " " & Err.Description & " " & "MModulGlobal-CheckDbSecDeleteData"
Resume Exit_CheckDbSecDeleteData
End If

End Function

Diese Funktion hatten wir natürlich auch noch bzgl. 'Replace' und 'Insert'.

sowosamma
23.07.2007, 16:21
danke ihr beiden für die schnelle Antwort. Sieht wohl doch so aus, als ob ich das Problem vom Hand anpacken muß

@Afk009
Ich habe keine Schaltflächen auf meiner Startseite, sondern steuer alles über ein Menü. Aber die einzelnen Menüpunkte kann ich dann mit solch einem Code 'freigeben' oder nicht

Afk009
23.07.2007, 18:40
du musst dann nicht die Münes damit belegen sondern die Formulare selbst, zb. beim Öffnen oder Anzeigen.


Gruß,
Iggy

gpswanderer
23.07.2007, 18:52
Hallo Andi,
warum aktivierst Du nicht das Sicherheitsystem von Access da kannst Du eigentlich alle Deine Wünsche erfüllen. Du kannst Gruppen anlegen und diesen Gruppen die verschiedenen Rechte zuordnen. Wenn Du einen neuen Namen erfasst hast, brauchst Du den dann nur der entsprechenden Gruppe zuzuordnen. Er übernimmt dann automatisch die rechte der Gruppe. Das Access eigen System hat den Vorteil des geringen Aufwandes zur Pflege und ist (mindestens) so sicher wie alles andere auch. Wenn das Sicherheitssystem von Access aktiviert ist, kann man auch mit dem Befehl "CurrentUser()" den angemeldeten Benutzer auslesen und weitere Einschränkungen auf z.B. Formularebene machen. Man kann auch z.B. einelne Formulare Gruppenabhängig anzeigen lassen. Meiner Meinung nach ist das Accesssystem am einfachsten zu handhaben. Wenn man es mal geblickt hat:grins:

sowosamma
24.07.2007, 08:01
Moin Klaus,

genau darauf zielte meine Frage. Da ich bisher noch keine Erfahrungen mit dem Sicherheitssystem von Access habe, wollte ich mal nachfragen 'was alles geht'. Nicht daß ich für meine neue Datenbank eine MDW anlegen und zig User und Gruppen aufbau und dann geht's nicht so wie ich will...

Darf ich diesbezüglich noch etwas nachbohren. Angenommen im Menü gibt es einen Punkt 'Reporting' dieser beinhaltet z.B. einen Bericht 'Gesamtertrag ldf. Jahr'. Dieser soll nur für die Geschäftleitung (Gruppe Geschäftsleitung, User A,B,C) und den Admin (Gruppe Admin, User MASTER) sichbar oder aufrufbar sein. Also würde ich mein Menü (mit meinem derzeitigen Wissen) wie folgt aufbauen:

Set MBarCtl = MBar.Controls.Add(Type:=msoControlPopup)
MBarCtl.Caption = "&Reporting"

'...

Set MBarSubCtl = MBarCtl.Controls.Add(Type:=msoControlButton)
MBarSubCtl.BeginGroup = True
With MBarSubCtl
.Style = msoButtonIconAndCaption
.Caption = "'Gesamtertrag ldf. Jahr"
.OnAction = "OpenReport_Report1"
.faceid = 287
.BeginGroup = True
If CurrentUser = "A" Or _
CurrentUser = "B" Or _
CurrentUser = "C" Or _
CurrentUser = "Master" Then
.Enable = True
Else
.Enable = False
End If
End With

'...

Wenn jetzt aber C aus der Geschäftleitung austritt und D eintritt, dann müsste ich den Code ändern. Und so lange C und D ihr Frontend nicht updaten, dann ist der Menüpunkt für C sichtbar und für D nicht. Das mit dem C wäre jetzt nicht das große Problem, da ich ihn ja im Sicherheitssytsem von Access die tatsächliche Berechtigung zum anschauen dieses Reports entziehen kann/werde.
Gibt es eine auch eine Möglichkeit die Gruppe auszulesen? So wie CurrentUser? Um mir diese Programmiererei zu sparen?

gpswanderer
24.07.2007, 08:30
Hallo,
mit dem Sicherheitssystem von Access hast Du doch keinen Programmieraufwand. UserA raus aus der Gruppe, UserY rein. fertig.

sowosamma
24.07.2007, 09:46
Hallo Klaus,

das hört sich so einfach bei Dir aus. Aber bei mir klappt's nicht.

Ich habe eine Datenbank 'Benutzertest NEU MASTER.mdb' und eine 'Benutzertest user.mdw'. Die Datenbank öffne ich über einen Shortcut (mit /wrkgrp...) und muß User und Passwort eingeben. Das funktioniert prima!

In der mdw habe ich folgende Gruppen:
Admins, Users, Betreuer und RiscControl

Und folgende Benutzer:
Admin (Gruppe Users, kein PW)
Andi (Gruppe Users und Betreuer, kein PW)
Master (Gruppe Admin, PW: MasterPW)
Tom (Gruppe Users und RiscControl, kein PW)

Master/Admin darf alles, Andi/Betreuer darf Berichte nur öffnen und Tom/RiscControl darf nichts. Egal mit welchem Namen ich mich aber anmelde, der Report öffnet sich und ich komm in den Designmodus. Wobei bei Andi und Tom der Hinweis kommt, daß sich die DB nicht im Exclusivmodus befindet. Aber wieso darf Andi in den Designmodus und wieso darf Tom den Bericht anschauen?

Ich hab mal alles angehängt. Wo ist mein Fehler?

Wenn ich die Datenbank komprimieren will, dann verweigert Access es mir, wenn ich als Andi angemeldet bin. Das Funktioniert wunderbar.

sowosamma
24.07.2007, 10:22
Ich IDIOT!!! Man(n) sollte der Gruppe User vielleicht noch die 'Berechtigungen' entziehen, wenn Andi bzw. Tom einer Gruppe X und Users angehören.

Gibt es denn eine Möglichkeit, daß Andi nur der Gruppe 'Betreuer' angehört. Kann die Gruppe 'Users' irgendwie gelöscht werden bzw. Andi nicht mehr in dieser Gruppe sein?

gpswanderer
24.07.2007, 10:50
Hallo,
bevor Du weitermachst, solltest Du das ganze noch mal neu machen. Da sind noch eingíge Fehler drin. Ich kann die DB starten (ohne die MDW) und das darf nicht sein. Außerdem ist nach wie vor der Administrator der Eigentümer der DB. Wenn alles richtig gemacht ist, muss als Eigentümer der Name stehen mit dem Du Dich an der DB anmeldest.
Anbei ein PDF, dort ist es genau beschrieben. Stimmt für Access 2003 nicht ganz, dort ist ja der Arbeitsgruppenadmin integriert.
Und - hier noch ein Link - (http://www.dbwiki.de/wiki.php?title=Access_Bedienungsanleitung:_Aktivieren_des_Sicherungssystems_durc h_Erstellen_einer_Arbeitsgruppendatei)
Bitte halte Dich überaus exakt an diese Anleitungen.

sowosamma
24.07.2007, 13:07
Hallo Klaus,

vielen Dank für die Anleitung und den Link. Der Link zu dbwiki kannte ich schon, aber irgendwie habe ich da wohl etwas zu schnell gelesen was die Sache mit dem löschen der Berechtigungen für die Gruppe 'Users/Benutzer' sowie den Eigentümern.
Die Anleitung.pdf ist absolut SPITZE!

Meine jetzige Übungsdatei funktioniert wunderbar. Nochmals vielen Dank!