🧱 Суть

Для доступа к проекту Supabase используются API-ключи.

Основных ключей два:

  • anon – публичный ключ для клиентских приложений.
  • service_role – приватный ключ с административными правами.

Главное различие между ними – применяются ли политики RLS.

📦 Типы ключей

anon

Используется:

  • в браузере;
  • в React-приложениях;
  • в мобильных приложениях.

Особенности:

  • безопасен для публикации;
  • работает от имени роли anon;
  • все запросы проходят через RLS.

service_role

Используется:

  • на сервере;
  • в API;
  • в серверных скриптах;
  • в SSR/Backend.

Особенности:

  • обладает полными правами;
  • обходит RLS;
  • позволяет выполнять административные операции.

Никогда не должен попадать в клиентский код.

✅ Где получить ключи

В панели Supabase:

Settings
└── API
    └── Project API Keys

Там доступны:

  • anon public
  • service_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 никогда нельзя хранить в публичном репозитории или отправлять в браузер.

🔗 Связано