Was sind Zugriffskontrolllisten (ACL)?

Aktualisiert: September 2026

Eine Zugriffskontrollliste ist eine Liste an einer Ressource, die benennt, welche Nutzer oder Rollen darauf zugreifen dürfen und was jeder tun darf. Alles hängt an dieser Zuordnung: Wo Rollensysteme Berechtigungen an Personen hängen, hängt eine ACL sie an das Objekt – jeder Datensatz mit eigener Gästeliste, jeder Eintrag (ein Access Control Entry, kurz ACE) ein Subjekt samt seinen Rechten. Sie ist eine der ältesten Sicherheitskonstruktionen der Informatik, und in Anwendungs-Backends ist sie das, was aus “nur Ada und die Redakteure dürfen dieses Dokument anfassen” ein Feld macht statt ein Feature.

Das Wichtigste in Kürze

FrageAntwort
Die StrukturObjekt → Liste von Einträgen · jeder Eintrag = Subjekt + Berechtigungen
Die drei BedeutungenNetzwerk-Verkehrsfilter · Dateiberechtigungen · ACLs pro Datensatz
vs. RBACACL beantwortet “wer darf dieses Objekt anfassen?” – RBAC “was darf diese Rolle?”
Die SkalierungslösungRolleneinträge + Standard-ACLs + Klassenregeln für den Normalfall
Die eiserne RegelServerseitig ausgewertet, bei jeder Anfrage – niemals im Client

Die Gästeliste eines Objekts

Dokument "Q3 roadmap" — ACL
┌─────────────────────┬───────┬───────────┐
│ Subjekt             │ Lesen │ Schreiben │
├─────────────────────┼───────┼───────────┤
│ user usr-8fk2 (Ada) │  ja   │    ja     │   ← Eigentümer
│ user usr-2mq7 (Bob) │  ja   │     —     │   ← einzeln gewährt
│ role editors        │  ja   │    ja     │   ← eine Rolle als ein Eintrag
│ public (alle)       │   —   │     —     │   ← Standard: geschlossen
└─────────────────────┴───────┴───────────┘

Als Daten, auf dem Datensatz selbst:
{ "title": "Q3 roadmap",
  "ACL": { "usr-8fk2": { "read": true, "write": true },
           "usr-2mq7": { "read": true },
           "role:editors": { "read": true, "write": true } } }

Diese Gästeliste im Anwendungscode schreiben:

// JavaScript / Node.js — Back4app JS SDK
// A per-object ACL: this document's own guest list
const doc = new Parse.Object('Document');
doc.set('title', 'Q3 roadmap');

const acl = new Parse.ACL(currentUser);   // owner: read + write
acl.setReadAccess(reviewerId, true);      // one user: read only
acl.setRoleWriteAccess('editors', true);  // a role as an entry
acl.setPublicReadAccess(false);           // everyone else: nothing
doc.setACL(acl);

await doc.save(); // enforced server-side on every future request

Die drei Bedeutungen von “ACL”

Die meisten Erklärungen greifen sich stillschweigend eine heraus; der Begriff benennt tatsächlich drei Mechanismen:

FamilieHängt anSo sieht ein Eintrag ausAusgewertet von
Netzwerk-ACLsRouter-/Firewall-SchnittstellenAllow-/Deny-Regel auf IPs, Ports, Protokoll – geordnet, der erste Treffer gewinnt, implizites Deny am EndeNetzwerkgeräten
Dateisystem-ACLsDateien und Verzeichnissenuser:ada:rw- – Erweiterung von Eigentümer/Gruppe/Andere (POSIX acl(5))Dem Betriebssystem
Anwendungs-ACLsZeilen, Dokumenten, ObjektenNutzer/Rolle → Lese- und Schreibrechte auf dem DatensatzIhrem Backend, pro Anfrage

Sie teilen die Form – eine Liste von Subjekt-Berechtigungs-Einträgen, die eine Ressource bewacht – und unterscheiden sich in allem anderen. Dieser Artikel behandelt die dritte Bedeutung: die Berechtigungslisten pro Datensatz in Anwendungs-Backends, die am wenigsten beschriebene und, für Produktentwickler, die meistgenutzte.

Wie eine Anfrage ausgewertet wird: das Zwei-Tore-Modell

Geschichtete Auswertung von Klassenberechtigungen und ACLs pro ObjektEine authentifizierte Anfrage passiert zuerst das Tor der Klassenberechtigungen, das für die gesamte Tabelle oder Klasse gilt; wird sie zugelassen, wird die ACL des konkreten Objekts für diesen Nutzer und diese Operation ausgewertet; nur Anfragen, die beide Tore passieren, erreichen die Daten.

verweigert

erlaubt

kein Eintrag

gewährt

Anfrage
(Nutzer + Operation)

Tor 1
Klassenregeln:
darf dieser Nutzer
Documents abfragen?

403

Tor 2
ACL dieses Objekts:
gewährt ein Eintrag
diesem Nutzer das Recht?

Objekt unsichtbar /
Schreiben abgelehnt

Daten

Eine authentifizierte Anfrage passiert zuerst das Tor der Klassenberechtigungen, das für die gesamte Tabelle oder Klasse gilt; wird sie zugelassen, wird die ACL des konkreten Objekts für diesen Nutzer und diese Operation ausgewertet; nur Anfragen, die beide Tore passieren, erreichen die Daten.

Schichten sind die Art, wie reife Systeme grobe und feine Kontrolle versöhnen: Klassenberechtigungen legen die Richtlinie für die ganze Kategorie fest (“nur authentifizierte Nutzer; nur Moderatoren löschen”), und die ACL pro Objekt entscheidet über den einzelnen Datensatz. Eine Anfrage muss beide Tore passieren – das heißt, eine vergessene ACL kann nicht öffnen, was die Klassenregel geschlossen hat, und eine großzügige Klassenregel kann trotzdem kein gesperrtes Objekt preisgeben. Dieselbe Schichtenlogik taucht eine Ebene tiefer als zeilenbasierte Sicherheit auf, wenn die Datenbank das Zeilenprädikat selbst durchsetzt.

ACL vs. RBAC vs. ABAC

KriteriumACLRBACABAC
Berechtigungen hängen anJedem ObjektRollen, die Nutzern zugewiesen sindRegeln über Attribute
Ursprüngliche FrageWer darf dieses Objekt anfassen?Was darf diese Rolle?Ist dieser Zugriff im Kontext erlaubt?
GranularitätAm feinsten – pro Datensatz, pro NutzerGrob – pro FunktionBeliebig – pro Bedingung
VerwaltungsaufwandWächst mit Objekte × SubjekteWächst mit der Zahl der RollenWächst mit der Regelkomplexität
Prüfung “wer sieht X?”Trivial – die Liste von X lesenIndirekt – Rollen auflösenSchwer – Regeln auswerten
Prüfung “was sieht Ada?”Schwer – alle Objekte durchsuchenTrivial – ihre Rollen lesenSchwer
SchwächeWildwuchsRollenexplosion, keine Nuance pro ObjektUndurchsichtiges Policy-Debugging

Die ehrliche Antwort heißt Komposition, nicht Konkurrenz: Rollen regeln Zugriff, der der Funktion folgt; ACLs regeln die Entscheidungen pro Objekt, die Rollen nicht ausdrücken können (“dieser Entwurf, diese beiden Prüfer”); Attributregeln springen ein, wenn der Kontext zählt (Zeit, Tenant, Zustand). Das praktische Scharnier zwischen den ersten beiden ist der Rollen-ACE – eine ACL-Zeile, deren Subjekt eine Rolle ist –, der die Kontrolle auf Objektebene behält und den Wechsel der Mitglieder an das Rollensystem delegiert.

Das Skalierungsproblem – und die Leiter der Gegenmaßnahmen

Naive ACLs pro Objekt wachsen mit N Objekte × M Subjekte: Eine Million Dokumente, die jeweils einzelne Nutzer aufführen, bedeutet, dass jede Einstellung, jeder Austritt und jede Umstrukturierung Listen ändert, die über den gesamten Datenbestand verstreut sind – das “schwer zu verwalten” aus jedem Lehrbuch, konkret geworden. Die Leiter der Gegenmaßnahmen, in der Reihenfolge, in der man sie erklimmt: Rolleneinträge (ein ACE deckt eine sich ändernde Personengruppe ab; die Mitgliedschaft wird an einer Stelle gepflegt); Standard-ACLs (jedes neue Objekt kommt mit Lese- und Schreibrecht für den Eigentümer und den richtigen Rolleneinträgen zur Welt – das Anwendungs-Pendant zu POSIX-Standard-ACLs auf Verzeichnissen); Klassenregeln für den Normalfall, wodurch Listen pro Objekt nur noch Ausnahmen abdecken; und, bei beziehungslastiger Größenordnung, graphbasierte Autorisierung (ReBAC), die Zugriff aus Beziehungen ableitet, statt überhaupt Listen zu speichern. Systeme, die diese Sprossen überspringen, geben ACLs nicht auf – sie ertrinken darin.

Durchsetzung: serverseitig oder gar nicht

Eine im Client durchgesetzte ACL ist ein Vorschlag. Buttons auszublenden, Listen in JavaScript zu filtern oder darauf zu vertrauen, dass die App nur erlaubte IDs sendet, scheitert immer gleich: Der Angreifer verändert die Anfrage, nicht die Oberfläche – aus /documents/41 wird /documents/42, und schon liest er den Datensatz eines anderen. Genau diese Fehlerklasse – Broken Object Level Authorization, der Spitzenreiter der API-Sicherheitsliste der OWASP – sollen ACLs pro Objekt schließen, und die OWASP-Leitlinie wird deutlich: Autorisierungsprüfungen laufen serverseitig, pro Anfrage, pro Objekt; Zugriff auf einen Typ von Objekt bedeutet niemals Zugriff auf jedes Objekt dieses Typs. Die Auswertung gehört in die Datenschicht, wo kein Client-Pfad sie umgehen kann.

Typische Anwendungsfälle

  • Nutzergenerierte Inhalte – jeder Beitrag, jede Datei, jede Notiz gehört ihrem Ersteller und wird Datensatz für Datensatz geteilt.
  • Zusammenarbeit an Dokumenten – Leser-/Bearbeiterlisten pro Dokument; der Teilen-Dialog ist ein ACL-Editor im UX-Gewand.
  • Datensätze mit mehreren Nutzern und Ausnahmen – der HR-Fall: Die betroffene Person liest ihre Akte, ihre Führungskraft schreibt sie, die Rolle der Prüfer liest alles.
  • Abgrenzung nach Tenant und Team – Rolleneinträge pro Team auf gemeinsamen Klassen, mit Freigaben pro Objekt für teamübergreifende Ausnahmen.
  • Standardmäßig private Apps – Messaging, Gesundheit, Finanzen: Jedes Objekt ist bei der Erstellung geschlossen und öffnet sich nur durch explizite Einträge.

ACLs oder Rollen? Eine Entscheidungsmatrix

SituationGreifen Sie zu
Zugriff folgt der Funktion über viele Datensätze hinwegRollen (RBAC)
Jeder Datensatz braucht eigene FreigabeentscheidungenACLs
Beide Muster gleichzeitig (die meisten realen Apps)Klassenregeln + ACLs mit Rolleneinträgen
”Alle lesen, der Eigentümer schreibt”Public-Read-Flag in der ACL + Eintrag des Eigentümers
Regeln hängen vom Kontext ab (Zeit, Zustand, Tenant)Attributbedingungen über der ACL
Tiefe Beziehungslogik (Organigramme, verschachtelte Gruppen)Systeme nach ReBAC-Art

Grenzen und Trade-offs

  • Wildwuchs ist der Normalverlauf. Ohne Rolleneinträge und Standardwerte werden Listen pro Objekt zu unprüfbarem Konfetti; die Leiter der Gegenmaßnahmen ist ab einer gewissen Größe nicht optional.
  • “Worauf hat dieser Nutzer Zugriff?” ist die teure Abfrage. ACLs optimieren die Prüfung pro Objekt; die Bestandsaufnahme pro Subjekt verlangt einen vollen Durchlauf oder Sekundärindizes.
  • Falsche Standardwerte sind stille Datenlecks. Ein öffentlich lesbar angelegtes Objekt bleibt öffentlich, bis es jemandem auffällt; Standard-ACLs verdienen dieselbe Prüfung wie Code.
  • Die Performance hängt an der Prüfung. Jeder Lesezugriff filtert nach der ACL; die Auswertung muss indiziert und in der Datenschicht durchgesetzt werden, nicht Endpoint für Endpoint angeflanscht.
  • ACLs autorisieren; sie authentifizieren nicht. Die Liste taugt nur so viel wie die Identität, die ihr vorgelegt wird – Sessions und Tokens sind die vorgelagerte Abhängigkeit.

ACLs mit Back4app

Back4app ist eine Open-Source-Plattform für Backend as a Service (BaaS), die eine verwaltete Datenbank, automatisch generierte REST- und GraphQL-APIs, Authentifizierung, Dateispeicher und Serverless-Funktionen mit Cloud Code kombiniert. Die ACL ist hier ein Feld erster Klasse: Jedes Objekt trägt eine, die Code-Tabs oben sind die vollständige API – Standardrechte des Eigentümers, Freigaben pro Nutzer, Rolleneinträge, öffentliche Flags – und Back4app setzt sie bei jeder REST-, GraphQL- und Live-Query-Anfrage durch, sodass Echtzeit-Abonnements dieselben Gästelisten respektieren wie Abfragen. Das Zwei-Tore-Modell kommt unverändert mit: Klassenberechtigungen setzen die Richtlinie der Kategorie im Dashboard, ACLs pro Objekt verfeinern sie Datensatz für Datensatz, und eine Einstellung für die Standard-ACL macht neue Objekte von Geburt an privat und dem Eigentümer vorbehalten. Die Skalierungsleiter ist eingebaut – Rollen sind Objekte, die Sie wie jede andere Datenklasse verwalten –, sodass Ihnen die Entwurfsentscheidungen bleiben, nicht die Maschinerie der Durchsetzung.

Häufige Fragen

Was ist eine ACL, einfach erklärt?

Eine Gästeliste, die an jeder Ressource hängt: Sie benennt, wer auf genau dieses Objekt zugreifen darf und was jeder damit tun darf – Ada liest und schreibt, Bob liest nur, alle anderen bleiben draußen. Die Liste wandert mit dem Objekt, deshalb kann jedes Objekt eigene Regeln haben.

Was ist ein Access Control Entry (ACE)?

Eine Zeile der Liste: ein Subjekt (ein Nutzer, eine Rolle oder "alle") zusammen mit den Berechtigungen, die ihm erteilt oder verweigert werden. Eine ACL ist nichts anderes als eine geordnete Sammlung von ACEs, die an einer einzigen Ressource hängt.

Welche Arten von ACLs gibt es?

Drei Familien teilen sich den Namen: Netzwerk-ACLs (geordnete Verkehrsfilter auf Routern und Firewalls), Dateisystem-ACLs (Berechtigungslisten pro Datei, die Eigentümer/Gruppe/Andere erweitern) und Anwendungs- oder Datenbank-ACLs (Berechtigungslisten pro Datensatz in Ihrer Datenschicht). In der Backend-Entwicklung ist fast immer die dritte gemeint.

Was ist der Unterschied zwischen ACL und RBAC?

Die Richtung der Zuordnung. Eine ACL hängt Berechtigungen an jede Ressource, Subjekt für Subjekt – ideal, wenn einzelne Objekte einzelne Entscheidungen brauchen. RBAC hängt Berechtigungen an Rollen und weist Nutzer diesen Rollen zu – ideal, wenn Zugriff der Funktion über viele Ressourcen hinweg folgt. Reale Systeme kombinieren beides: Rollen für die groben Linien, ACLs für die Ausnahmen pro Objekt.

Wie funktionieren ACLs in einer Datenbank?

Jede Zeile oder jedes Dokument trägt (oder referenziert) die eigene Berechtigungsliste – typischerweise ein ACL-Feld, das Nutzer-IDs und Rollennamen auf Lese- und Schreibrechte abbildet. Die Datenbank oder das Backend wertet sie bei jeder Operation aus, was sich natürlich mit zeilenbasierter Sicherheit und Berechtigungsschichten pro Tabelle verzahnt.

Was ist der Unterschied zwischen einer ACL und einer Capability List?

Zwei Sichten auf dieselbe Zugriffsmatrix: Eine ACL ist eine Spalte – beim Objekt gespeichert, listet sie dessen Subjekte auf –, eine Capability List ist eine Zeile – beim Subjekt gespeichert, listet sie dessen Objekte auf. ACLs machen "wer darf dieses Objekt anfassen?" sofort prüfbar; Capabilities erleichtern "worauf darf dieser Nutzer zugreifen?", erschweren aber den Widerruf.

Warum skalieren ACLs für sich allein nicht?

Weil der Verwaltungsaufwand mit Objekte × Subjekte wächst: Jede Einstellung, jeder Austritt und jeder Teamwechsel bedeutet, Listen zu ändern, die über Millionen von Objekten verstreut sind. Die Gegenmaßnahmen sind Rolleneinträge (ein ACE deckt eine sich ändernde Gruppe ab), Standard-ACLs beim Anlegen und Regeln auf Klassenebene für den Normalfall, damit die Listen pro Objekt nur noch Ausnahmen behandeln.

Was ist der Unterschied zwischen Berechtigungen pro Objekt und pro Klasse?

Die Granularität. Berechtigungen pro Klasse (oder pro Tabelle) kontrollieren eine ganze Kategorie – "nur angemeldete Nutzer dürfen Documents abfragen". ACLs pro Objekt kontrollieren einen Datensatz – "nur Ada darf dieses Dokument lesen". Geschichtete Systeme prüfen zuerst das Tor der Klasse, dann die ACL des Objekts; eine Anfrage muss beide passieren.

Verwandte Begriffe

Vergleichen mit

Weiterführende Quellen

Bereit, Ihr Backend zu bauen?

Starten Sie Ihr Projekt auf Back4app in wenigen Minuten — Datenbank, Authentifizierung, APIs und Cloud Code inklusive. Keine Kreditkarte erforderlich.

Geschrieben und geprüft von Back4app Engineering, Back4app Engineering · Veröffentlicht am 2026-09-24