2009-05-26 9 views
0

Ich habe Benutzer für meine Anwendung mit Zugriffssteuerungsliste (das sind beide Tabellen/Schema/Objekte). Derzeit werden diese aus der Datenbank gelesen, Boolesche Werte werden verwendet, um anzuzeigen, was sie anzeigen/bearbeiten können. Jeder kann jedoch trotzdem zur Datenbank gehen und die Daten ändern. Kann mir jemand einen Vorschlag machen, was ich alles machen kann? Ich hoffe, mir ist klar, dass wir Benutzer (uname + pass) und acl (empui_access, empdat_manipulate) haben. Jegliche irgendwie Sicherheitslösungen über Code etc ...Vorschläge für Sicherheitsdesign für Access Control List in der Datenbank?

+0

Welche Datenbank benutzen Sie? SQL Server? MySQL? Orakel? Gibt es viele verschiedene Rechte? Viele Nutzer? Unterschiedliche Zugriffsebenen für jedes Recht? – DonkeyMaster

+0

keine sorgen der datenbank ich könnte jede verwenden das ist mit codierung design verbunden. – abmv

Antwort

0

So etwas wie

table users 
username: string 
password_hash: hex 
acl: bit array 

Benutzername ist der Benutzername, password_hash ist der Hash des Passworts, mit einem Körnchen Salz. Es ist falsch, ein einfaches Passwort zu speichern, aber das wusstest du schon, oder?

ACL wird als Zeichenfolge deklariert, aber als Bit-Array verwendet. Jedes Bit steht für eine bestimmte Berechtigung. 1 bedeutet, dass der Benutzer die Berechtigung hat, 0 bedeutet, dass er dies nicht tut. Um nach einem bestimmten Bitwert zu suchen, machst du ein bitweises AND auf der acl. Wenn das Ergebnis nicht Null ist, wird der Zugriff gewährt. Wenn das Ergebnis Null ist, wird der Zugriff verweigert.

Zum Beispiel:

// permission to read employee data 
public const long READ_EMPL_DATA = 0x01 

... 
{ 
    User user = database.GetSomeUser(); 
    // test for READ_EMPL_DATA permission 
    if (0 != (user.ACL & READ_EMPL_DATA)) { 
     // access granted 
    } else { 
     // access denied 
    } 
    // give READ_EMPL_DATA permission 
    if (0 != (user.ACL & READ_EMPL_DATA)) 
     user.ACL = user.ACL & READ_EMPL_DATA 
} 

Zur Unterstützung der Gruppe hinzuzufügen, fügen Sie ein paar Tabellen.

table group 
groupname: string 
acl: bit array 

table user_group 
user_id: id 
group_id: id 

Und testen Sie zusätzlich zum Testen für die Berechtigung auf Benutzerebene die Gruppen, denen der Benutzer angehört. Natürlich schreiben Sie einige Hilfsfunktionen, vielleicht eine gespeicherte Prozedur.

Ich hoffe, dass Sie damit begonnen haben. Wenn nicht, kann ich Ihnen ein beschreibenderes Beispiel oder einen aktuelleren Code oder andere Hilfe geben.

+0

kann jemand Sie Bit-Array ändern (ich habe es nicht zuvor verwendet) von der DB und es kann die Benutzerrechte ändern? – abmv

+0

Das ist eine andere Art von Problem. Ja, jemand mit den richtigen Berechtigungen könnte diesen Wert ändern. Aber andererseits könnte diese Person auch das Passwort ändern. Es geht darum, Ihre Datenbank zu sichern, und SQL Server hat dafür bereits eine Lösung. Zum Beispiel könnten Sie dem Gastbenutzer Leseberechtigungen für unsere 3 Tabellen geben, aber ohne Schreibrechte können sie keine Änderungen vornehmen. – DonkeyMaster

+0

Dieser acl ist nicht verwandt mit db, dies ist eine geschäftliche Anforderung – abmv

-1

Dies ist spezifisch für PostgreSQL, aber Sie können wahrscheinlich einige gute Ideen von Veil bekommen.