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?
Antwort
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.
kann jemand Sie Bit-Array ändern (ich habe es nicht zuvor verwendet) von der DB und es kann die Benutzerrechte ändern? – abmv
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
Dieser acl ist nicht verwandt mit db, dies ist eine geschäftliche Anforderung – abmv
Dies ist spezifisch für PostgreSQL, aber Sie können wahrscheinlich einige gute Ideen von Veil bekommen.
- 1. Access Control List Datenbankspalte zu verwalten, die
- 2. Vorschläge für Data Access Interface Name
- 3. Standardwert für Access-Control-Allow-Methoden
- 4. List Control
- 5. Datenbank Vorschläge für Zeitreihen von Ereignissen
- 6. Asp.net Time Input Control Vorschläge
- 7. Access Master Page Control
- 8. Vorschläge für in node.js
- 9. LDAP für Application Access Control, wie viel sollte es steuern?
- 10. Vorschläge für serviceorientierte Architektur
- 11. Drupal Access Control Liste
- 12. Access-Control-Allow-Origin für mehrere Domänen, einfacher
- 13. Cassandra access control
- 14. Sailsjs Datenbankadapter für die Microsoft Access-Datenbank
- 15. Vorschläge für Grails .gitignore
- 16. Linux CVS Access Control
- 17. Nein "Access-Control-Allow-Origin-Header für HTTPS-Anfragen
- 18. XMLHTTPRequest Access-Control-Allow-Origin
- 19. Versionskontrolle für Access VBA-Code?
- 20. Konvertieren von Access-Datenbank in MSSQL-Datenbank mit Microsoft SQL Server Migrations-Assistenten für Access
- 21. Komponententests mit -fno-access-control
- 22. File-Access-Control mit mod_rewrite
- 23. Access-Control-Allow-Origin-Syntax
- 24. jQuery.ajax Access-Control-Allow-Origin
- 25. Access-Control-Allow-Origin in .htaccess
- 26. Haben Sie Vorschläge für diese Montage Mnemonics?
- 27. prüfen für die Existenz eines Datensatzes in Access-Datenbank C#
- 28. Irgendwelche Grid-Vorschläge für Breeze?
- 29. Vorschläge für eine gute Inhaltsformatierungsbibliothek
- 30. Paypal Access-Control-Allow-Origin
Welche Datenbank benutzen Sie? SQL Server? MySQL? Orakel? Gibt es viele verschiedene Rechte? Viele Nutzer? Unterschiedliche Zugriffsebenen für jedes Recht? – DonkeyMaster
keine sorgen der datenbank ich könnte jede verwenden das ist mit codierung design verbunden. – abmv