Fragen Sie Ihre Datenbank mit dem JavaScript SDK ab
Die alltäglichen Abläufe von aura.db, die Regeln, die unsichere Aufrufe ablehnen, und wie man eine Tabelle mit Sicherheit auf Zeilenebene schützt.
1. Zeilen lesen
aura.from('todos') ist eine Abkürzung für aura.db.from('todos'). Jeder Aufruf gibt { data, error } zurück und löst nie aus, siehe Clientoptionen und Fehler.
Filterkette: eq, neq, gt, gte, lt, lte, like, ilike, in, is und die anderen, die in der Datenbankreferenz aufgeführt sind. Verwenden Sie für eine Seite mit Zeilen range(from, to).
2. Einfügen, Aktualisieren und Löschen
Zwei Regeln schützen Sie vor Fehlern:
- Eine Batch-Einfügung benötigt in jeder Zeile die gleichen Schlüssel. Zeilen mit unterschiedlichen Schlüsseln geben
400mitAll object keys must matchzurück. Füllen Sie die fehlenden Schlüssel mitnullaus. update()unddelete()ohne Filter werden vom Client mit dem Fehlercodeunfiltered_mutationabgelehnt, bevor eine Anfrage gesendet wird. Um jede Zeile absichtlich zu ändern, führen Sie SQL von einem Server aus.
3. Eine Reihe, viele Reihen zählen
count: 'exact' zählt jede passende Zeile. 'planned' und 'estimated' sind bei sehr großen Tabellen und ungefähren Werten schneller.
4. Schützen Sie einen Tisch
Die Sicherheit auf Zeilenebene ist von in einer neuen Tabelle. Mit dem öffentlichen Schlüssel kann ihn jeder lesen und schreiben. Aktivieren Sie es und fügen Sie dann die benötigten Richtlinien hinzu:
Die Datenbankrollen sind aura_anon, aura_authenticated und aura_service_role. auth.uid() ist NULL für den öffentlichen Schlüssel und eine Benutzer-ID für einen angemeldeten Benutzer. Siehe Sicherheit auf Zeilenebene.
Ein service_role-Schlüssel umgeht RLS von Natur aus: Behalten Sie ihn auf Ihrem Server.
5. SQL-Funktionen und RPC
Erstellen Sie eine Funktion von einem Server und rufen Sie sie dann von überall mit rpc() auf:
- Zum Aufruf ist
grant_execute_toerforderlich. Ohne sie kann niemand die Funktion ausführen. Eine Rolle, die nicht aufgeführt ist, erhält403 permission denied for function. Es werden sowohlauthenticatedals auchaura_authenticatedakzeptiert. - Eine neue Funktion ist nach einigen Sekunden aufrufbar. Bis die API ihr Schema neu lädt, gibt
rpc()404 Could not find the functionzurück. - Das Erstellen von Funktionen mit unformatiertem SQL (
CREATE FUNCTION) wird abgelehnt: Verwenden SiecreateFunction.
6. Führen Sie SQL von einem Server aus
db.sql() benötigt einen service_role-Schlüssel. Es lehnt einen DELETE ohne WHERE ab und liest keine Systemkataloge wie pg_class oder pg_roles. Um Ihre Tabellen aufzulisten, verwenden Sie admin.db.schema().