---
title: "Supabase veřejný bucket: kdo přečte vaše soubory"
description: "Co změní veřejný bucket v Supabase Storage, co ne, co vrátil můj lokální test u veřejného a soukromého bucketu a kdy použít který."
url: "https://madsalt.tech/cs/notes/supabase-public-bucket/"
author: "Denys Zaichenko"
author_url: "https://madsalt.tech/cs/about/"
language: "cs"
published: 2026-11-04
---

# Supabase veřejný bucket: kdo přečte vaše soubory

TL;DR

Veřejný bucket servíruje každý soubor v něm komukoli, kdo zná URL, bez klíče a bez přihlášení: vaše politiky storage se při stahování nekonzultují. Na mém lokálním stacku vrátil stejný testovací soubor `200` s obsahem z veřejného bucketu a `400` ze soukromého. Nahrávání, mazání a přesouvání stále procházejí politikami. Veřejné buckety používejte pro soubory, které jsou veřejné ze své podstaty, například avatary a obrázky článků, a pro vše ostatní soukromé buckety s podepsanými URL.

Můj bezplatný [bezpečnostní checker pro Supabase](https://madsalt.tech/cs/tools/supabase-security-check/) má dvě pravidla o bucketech: „Veřejné buckety ve Storage“ je vypíše, abyste si potvrdili, že každý má být veřejný, a „Veřejné buckety bez limitů nahrávání“ hlásí veřejné buckety bez limitu velikosti nebo typu souboru. Tady je, co veřejný příznak doopravdy mění.

## Co v Supabase znamená veřejný bucket?

[Průvodce buckety](https://supabase.com/docs/guides/storage/buckets/fundamentals) od Supabase definuje dva modely přístupu. V soukromém bucketu prochází každá operace, včetně stahování, politikami RLS na `storage.objects`; soubor se čte s tokenem uživatele nebo s podepsaným URL, jehož platnost vyprší. Ve veřejném bucketu načítání a servírování souborů kontrolu přístupu obchází, takže soubor přečte kdokoli s URL. Kontrola přístupu stále platí pro nahrávání, mazání, přesouvání a kopírování.

Buckety jsou ve výchozím stavu soukromé. Veřejným se bucket stane, když někdo zaškrtne políčko v Dashboardu nebo ho vytvoří s `public: true`, což je častá zkratka, když se nenačte obrázek.

## Co vrátil který bucket v mém testu?

Na lokálním stacku Supabase (CLI 2.109.1) jsem vytvořil jeden veřejný a jeden soukromý bucket, nahrál do obou stejný malý textový soubor pomocí secret key a pak ho vyžádal bez jakéhokoli klíče, jako cizí člověk s odkazem:

![Tentýž soubor, vyžádaný bez klíče. Lokální Supabase Storage, jeden veřejný a jeden soukromý bucket. Veřejný bucket: Požadavek, bez klíče → veřejný bucket → 200, soubor odeslán; Soukromý bucket: Požadavek, bez klíče → soukromý bucket → 400, nenalezeno.](https://madsalt.tech/charts/cs/supabase-public-bucket.svg)

*Moje reprodukce na lokálním Supabase, 23. října 2026.*

| Požadavek na `2026/invoice-001.txt`                       | Veřejný bucket       | Soukromý bucket           |
| --------------------------------------------------------- | -------------------- | ------------------------- |
| `/storage/v1/object/public/…`, bez klíče                  | `200`, obsah souboru | `400`, „Bucket not found“ |
| `/storage/v1/object/authenticated/…`, jen publishable key | `200`                | `400`                     |

Soukromý bucket odpovídá, jako by neexistoval, což chcete. Veřejný vydá soubor každému, kdo cestu uhodne nebo najde.

## Proč na URL tolik záleží?

Veřejný soubor je tajný jen tak, jak je tajná jeho cesta. Cesty bývají předvídatelné: id uživatele, datum, číslo faktury. Uniknou také ze zdroje stránky, ze sdílených odkazů, z historie prohlížeče a z logů. Faktura, sken pasu nebo podepsaná smlouva ve veřejném bucketu je prakticky zveřejněná.

## Jak vybrat a opravit?

- **Veřejný bucket:** soubory pro každého, například avatary, fotky produktů a obrázky na blogu. Nastavte na bucketu limit velikosti souboru a povolené typy MIME, aby veřejnou cestu pro nahrávání, kterou vaše politiky povolí, nešlo využít k hostování čehokoli jiného.
- **Soukromý bucket:** dokumenty, exporty, faktury, cokoli osobního. Stahujte se session uživatele nebo vytvořte podepsané URL s omezenou platností.

Přehled bucketů a jejich limitů:

```sql
select id, public, file_size_limit, allowed_mime_types
from storage.buckets
order by public desc, id;
```

Soukromý bucket potřebuje také politiky na `storage.objects`, obvykle kontrolující, že první složka cesty je id uživatele nebo firmy. Po přesunu projektu ty politiky spočítejte: u jedné aplikace selhalo každé nahrání, protože migrace politik nikdy neproběhla, což jsem popsal v [checklistu zabezpečení aplikace z Lovable](https://madsalt.tech/cs/blog/lovable-app-security-checklist/). Co dalšího dosáhne publishable key, je v článku [Supabase anon key vs service role key](https://madsalt.tech/cs/blog/supabase-anon-key-vs-service-role-key/).
