🧱 Суть
Для доступа к проекту Supabase используются API-ключи.
Основных ключей два:
anon– публичный ключ для клиентских приложений.service_role– приватный ключ с административными правами.
Главное различие между ними – применяются ли политики RLS.
📦 Типы ключей
anon
Используется:
- в браузере;
- в React-приложениях;
- в мобильных приложениях.
Особенности:
- безопасен для публикации;
- работает от имени роли
anon; - все запросы проходят через RLS.
service_role
Используется:
- на сервере;
- в API;
- в серверных скриптах;
- в SSR/Backend.
Особенности:
- обладает полными правами;
- обходит RLS;
- позволяет выполнять административные операции.
Никогда не должен попадать в клиентский код.
✅ Где получить ключи
В панели Supabase:
Settings
└── API
└── Project API KeysТам доступны:
anon publicservice_role secret
💻 Код
Создание обычного клиента для фронтенда:
import { createClient } from '@supabase/supabase-js';
export const supabase = createClient(
SUPABASE_URL,
SUPABASE_ANON_KEY
);Клиент автоматически будет работать с учётом RLS.
Важно
Нельзя использовать:
createClient(
SUPABASE_URL,
SERVICE_ROLE_KEY
);в React или любом другом клиентском приложении.
Если злоумышленник получит service_role, он сможет:
- читать любые данные;
- изменять любые записи;
- удалять данные;
- обходить все политики безопасности.
🎯 Вывод
anon– используется на клиенте и всегда подчиняется RLS.service_role– используется только на сервере и имеет полный доступ к базе.- Безопасность Supabase строится на сочетании
anon+ RLS. service_roleникогда нельзя хранить в публичном репозитории или отправлять в браузер.