2009-08-21 12 views
3

Ich habe eine einfache .NET 3.5-Anwendung zum Ändern einiger Datenbankfelder mit einem ODBCDataSet. Nun fragt der Feature Creep, ob ich Tabs und andere Steuerelemente basierend auf den Datenbankberechtigungen des Benutzers ausblenden oder anzeigen kann.So testen Sie Benutzerberechtigungen für die Datenbank

Im Idealfall möchte ich die Berechtigungen nur auf dem SQL Server mit Windows-Benutzergruppen steuern, und die App würde kein integriertes Authentifizierungs- oder Berechtigungssystem haben - es verwendet einfach das Windows-Konto des angemeldeten Benutzers die Datenbankverbindung. Also müsste es die Berechtigungen "testen", um festzustellen, ob die Registerkarten für den Benutzer angezeigt werden sollen oder nicht. Wenn sie zum Beispiel Schreibrechte für eine bestimmte Tabelle haben, wäre die Registerkarte zum Bearbeiten sichtbar. Wenn nicht, wird die Registerkarte nie für sie geladen.

Das ist wirklich der Teil, ich brauche Hilfe mit: Wie kann ich die Berechtigungen des Benutzers auf dem ODBCDataSet auflisten oder testen?

+2

das Feature Creep ... klingt wie ein Dilbert-Zeichen. Können Sie die Berechtigungen des Benutzers in einer separaten Tabelle speichern? – Beth

+0

Einer der komplexeren Fälle könnte sein, wenn die Benutzer Lese-/Auswahlberechtigungen haben, aber nicht 'Schreiben/Aktualisieren', und ich hoffte, ein aktuelles Update vermeiden zu müssen, besonders wenn einige Tabellen keine fremden Datensätze haben können. Das Hinzufügen einer gespeicherten Prozedur oder einer separaten Tabelle wäre jedoch harmlos. Hm ... Ich mag es. Oh, und ich denke, dass die Feature Creep war ein Gast-Charakter in Dilbert an einem Punkt. Ich mochte schon immer die Idee, sie zu personifizieren. :) – ewall

Antwort

1

Sie könnten immer versuchen/den Anruf an die DB abfangen. Dies würde den Benutzer gegenüber der Datenbank authentifizieren und dann eine gespeicherte Prozedur erstellen, um alle zugänglichen Tabellen zurückzugeben.

+0

neugierig, was Sie mit gemacht haben. Ich habe mir nicht die Zeit genommen, die Realitäten der Abfrage eines Benutzerzugriffs zu recherchieren. Ich wusste nur, dass es Workarounds gab (d. H. Test update/select/etc.). – madcolor

2

Sind Sie dagegen, dass Ihre App die Windows-Benutzergruppen kennt? Im Allgemeinen verwenden wir AD-Gruppen die ganze Zeit für die Sicherheit, wie Sie in der Datenbank UND im .NET-Code sprechen. Das Zeigen/Verstecken von Features ist genau der Punkt. Selbst wenn sie es aus irgendeinem Grund schaffen, das Feature zur Anzeige zu bringen, überprüft die Datenbank zusätzlich ihre Rolle und kann Aktionen verhindern.

Ich persönlich denke, die Rolle Mitgliedschaft in .NET-Code zu überprüfen ist die einfachste Lösung (Sie können dies mit der IsInRole Methode tun).

Wenn es jedoch Gründe gibt, warum Sie die App nicht auf Gruppennamen aufmerksam machen können oder wollen, falls sie sich ändern, verstehe ich. Es gibt wahrscheinlich keine ODBC-Methode zur Überprüfung, da jede Methode höchstwahrscheinlich proprietär und/oder datenbankabhängig sein würde (SQL Server, etc.) ... ansonsten müssten Sie Code schreiben, um einen Befehl zum Einfügen/Aktualisieren zu versuchen auf einem bekannten Test-Datensatz und sehen, ob es mit einer SqlException kommt, denke ich.

Verwandte Themen