„But what about security? But what about data governance?“ — mit diesen beiden Fragen beginnt ein Erfahrungsbericht über Claude Dashboards. Genau da liegt das Problem, das viele Teams beschäftigt, sobald sie KI-gestützte Business Intelligence einsetzen wollen. Die Werkzeuge sind schnell, die Visualisierungen hübsch, aber wer welche Zeile sehen darf, bleibt offen.
Darragh Murray, nach eigener Einschätzung ein Praktiker mit Erfahrung in klassischen BI-Werkzeugen, wollte das nicht hinnehmen. Er baute zeilenbasierte Zugriffskontrolle in ein Claude Dashboard ein. Das Ergebnis: dasselbe Dashboard-Artefakt, vier verschiedene Logins, vier verschiedene Antworten — und ein Nutzer, dem der Zugriff auf die dahinterliegenden Daten komplett verweigert wird.
Warum ein Claude Dashboard von sich aus niemanden aussperrt
Ein Claude Dashboard ist technisch betrachtet zunächst nur eine Anordnung von Analyseobjekten. In dem Artefakt selbst liegen keine Verkaufsdaten, keine Nutzertabelle, keine Rollenlogik. Murray vergleicht es mit einem leeren Bilderrahmen, in den bei jedem Öffnen ein neues Foto eingesetzt wird. Das Bild entsteht erst, wenn die Anwendung die passenden Daten anfordert.
In seinen Versuchen fand er keinen Weg, diese Filterung direkt in Claude abzubilden. Er räumt ein, sich irren zu können, doch der Eindruck bleibt: Eine native Funktion für row-level security gibt es in der Anwendung offenbar nicht. Das ist kein Weltuntergang. Es lohnt sich, genauer hinzuschauen, wo Zugriffskontrolle eigentlich hingehört. Denn eine fehlende Funktion im Frontend macht das Problem nicht unlösbar.
Row-Level Security ist ein Muster, kein Feature eines einzelnen Produkts
Databricks beschreibt row-level security als Zugriffskontrolle auf Datenbankebene, die begrenzt, welche Zeilen einer Tabelle ein Nutzer lesen oder verändern darf — abhängig von Identität, Rolle oder Sitzungskontext. Einfacher gesagt: Man legt einen Filter über den Datenstrom, der zu einem Dashboard fließt. Wer ihn nicht passiert, sieht nichts.
Ein Lohnbuchhaltungssystem ist das klassische Beispiel. Jede Abteilung sieht ihre eigenen Abrechnungen und sonst nichts. Entscheidend ist die Beobachtung Murrays: Dieses Muster gehört zur Datenschicht, nicht zum BI-Werkzeug. In Power BI oder Tableau sitzt row-level security traditionell in der semantischen Schicht, nicht im Bericht. Dasselbe Prinzip lässt sich auf eine KI-gestützte Oberfläche übertragen, wenn man eine Komponente hat, die zwischen Modell und Daten vermittelt.
Ein MCP Server als Türsteher zwischen Dashboard und Daten
Diese Vermittlerrolle übernimmt in dem Experiment das Model Context Protocol, kurz MCP. Murray beschreibt es als offenes Protokoll, das standardisiert, wie KI-Anwendungen mit externen Ressourcen sprechen — mit Werkzeugen, mit Kontext und mit Daten. An dieser Stelle lässt sich die Kontrolle einbauen.
Man kann sich den Aufbau wie den Eingang zu einem Club vorstellen. Das Dashboard ist der Gastraum, das MCP Server-Programm der Türsteher. Jeder, der Daten will, muss am Türsteher vorbei, und der prüft zuerst den Ausweis. Erst danach entscheidet er, auf welche Räume der Gast Zugriff hat. Der MCP Server ist hier keine technische Nebensache, sondern der eigentliche Sicherheitsmechanismus.
Murray baute dafür zum ersten Mal einen eigenen MCP Server, was für ihn Neuland war. Zum Einsatz kamen Claude für die Visualisierung, der MCP Server als sichere semantische Schicht, Python mit dem FastMCP-Framework für die Implementierung, Auth0 in Kombination mit Google für die Anmeldung, Fly.io als Hosting-Umgebung sowie DuckDB als analytische Datenbank im Arbeitsspeicher. Auth0 ist eine cloudnative Plattform für Identitäts- und Zugriffsverwaltung und gehört zu Okta. Als Datenbasis diente ein synthetischer Datensatz namens OzMart, ein erfundener australischer Süßwarenhersteller, dessen Verkaufsdaten als Parquet-Dateien im MCP Server liegen und beim Start in DuckDB geladen werden.
Vier Prüfungen, bevor eine einzige Zeile zurückgeht
Der Ablauf ist geradlinig gehalten. Öffnet ein Nutzer das Dashboard, wird er über seinen Google-Zugang authentifiziert. Auth0 bestätigt die Identität und schlägt die Rolle nach, die dem Konto zugeordnet ist. Anschließend erhält der Nutzer einen digitalen Ausweis, den Claude bei jeder Datenanfrage an den MCP Server mitschickt.
Beim MCP Server laufen vier Prüfungen nacheinander ab. Zuerst wird der Ausweis kontrolliert: Ist die digitale Signatur echt, ist sie für diesen Server ausgestellt, ist sie noch gültig? Ungültige Ausweise enden hier. Danach werden die Regeln nachgeschlagen, also die Frage beantwortet, auf welche Daten die Rolle zugreifen darf. Im dritten Schritt baut der Server die Abfrage und ergänzt sie um diese Einschränkung. Im vierten Schritt läuft die Abfrage gegen DuckDB, und das Ergebnis geht zurück an Claude zur Darstellung.
Entscheidend ist die Arbeitsteilung. Nicht das Dashboard entscheidet, was sichtbar wird, und auch nicht das Sprachmodell. Der MCP Server filtert, bevor Daten das Modell erreichen. Wer row-level security für Claude Dashboards implementieren will, sollte sich an diese Designregel halten: Die Kontrolle liegt in der Datenschicht, das Frontend zeichnet nur, was es bekommt.
Vier Logins, ein Dashboard: Sam, der CEO und der abgewiesene Nutzer
Die Wirkung zeigt sich im Vergleich der Nutzerrollen. Sam, ein Verkaufsmanager im erfundenen Unternehmen OzMart, ist für die Regionen Ost und West verantwortlich. In seinem Profil im MCP Server sind die Rollen mgr_east und mgr_west hinterlegt, dazu fünf Kennzahlen und drei freigegebene Werkzeuge. Öffnet Sam das Dashboard, sieht er seine regionalen Umsätze über die Zeit — und nichts darüber hinaus.
Die Kacheln für Nord und Süd erscheinen im Layout, zeigen aber nur „Not Available“. Sam weiß, dass es diese Regionen gibt, er erfährt nur nicht, was in ihnen passiert. Anders die Geschäftsführung: Mit der Rolle admin liefert derselbe MCP Server Daten für alle vier Regionen. Ein weiterer Testlogin wird komplett abgewiesen und bekommt gar keine Daten zu sehen. Dasselbe Artefakt, vier Identitäten, vier Ergebnisse — die Unterschiede entstehen nicht durch unterschiedliche Dashboards, sondern durch Datenzugriffskontrolle an einer Stelle.
Für die Praxis ist das der relevante Teil. Rollen und Regeln pflegt man einmal in der semantischen Schicht, nicht in jedem Bericht neu. Ändert sich eine Zuständigkeit, ändert sich eine Policy — nicht zwanzig Dashboards. Diese Trennung ist der Grund, warum das Muster seit Jahren in klassischen BI-Umgebungen funktioniert und warum es sich auf MCP-basierte Architekturen übertragen lässt.
Was der Prototyp nicht ist — und was er trotzdem zeigt
Murray ordnet sein Vorgehen selbst ein. Er beschreibt es als Machbarkeitsnachweis, nicht als Produkt, und räumt ein, dass der Entstehungsweg an manchen Stellen von „Vibes“ geprägt war. Für Planung und Umsetzung nutzte er Claude Code im Planungsmodus, prüfte den Python-Code anschließend selbst und konfigurierte Auth0 sowie Fly.io von Hand. Wer diesen Aufbau produktiv nachbaut, muss diese Schritte verstehen, nicht nur kopieren.
Offene Punkte bleiben genug. Die Anmeldung hängt an einem externen Identitätsanbieter, die Rollenpflege braucht einen Prozess, und wer die Policies schreibt und testet, ist eine organisatorische Frage, keine technische. Der Beitrag ist als erster Teil einer zweiteiligen Serie angelegt. Der zweite Teil soll zeigen, wie sich ein solcher Aufbau mit kostenlosem oder günstigem Werkzeug umsetzen lässt.
Wer KI-gestützte Analysewerkzeuge ausrollt, sollte die Zugriffsfrage nicht dem Dashboard überlassen, nur weil dort keine Funktion dafür vorgesehen ist. Eine Komponente zwischen Modell und Daten, die Identität kennt, Regeln prüft und Abfragen filtert, lässt sich heute bauen — mit offenem Protokoll, etwas Python und einem Identitätsanbieter. Das ist keine fertige Lösung, aber ein brauchbarer Entwurf für alle, die Data Governance nicht auf die Zeit nach dem Rollout verschieben wollen.
Quelle: thedatavist.substack.com




