Před všemi těmi lety jsem s tím bojoval, takže tady je odpověď, kterou bych si přál mít:
Obecně je to příliš komplikované a hlavní odpověď pro základní aplikaci zní:oprávnění uživatelů budou spravována kódem PHP ve vámi provedených voláních API a jeden uživatel DB je v pořádku. Všichni uživatelé by se obecně měli vyhýbat přímé interakci s DB for app dev, aby nedošlo k porušení posvátnosti dat.
Je dobré myslet na bezpečnost a omezení, ale jednoduchost je král - čím složitější to uděláte, tím těžší je to udržovat, a proto je snazší přehlédnout rohová pouzdra.
Mám vytvářet nového uživatele databáze pokaždé, když registruji nového uživatele webu?
Ne, uživatelé databáze se liší svými oprávněními. Výsledkem je, že všichni uživatelé odpovídají sadě skupin s různými úrovněmi oprávnění. Databázové účty jsou oddělené od webových účtů – připojení k databázi se provádí za scénou a nemá žádnou vazbu na používaný webový účet.
Dobrým přístupem by bylo vytvořit DB účet pro každou službu připojující se přímo k DB. Pro drtivou většinu to bude jedna služba, váš webový server. Pokud se aplikace rozroste a objeví se izolované služby, jako jsou audity, mikroslužby, zabezpečení, IOT, pravděpodobně by měly mít své vlastní účty.
Je bezpečné udělit oprávnění CRUD všem uživatelům webu?
Otázka je scestná - CRUD dáváte na účet DB, který ho bude potřebovat. Oprávnění CRUD spravovaná v PHP opravdu závisí na vaší aplikaci a konkrétních koncových bodech. Pravděpodobně například nechcete, aby všichni vaši uživatelé mohli mazat záznamy uživatelů, takže váš PHP kód by tomu měl zabránit.
Kolik různých typů uživatelů databáze by mělo být?
Počet závisí na vaší databázi. Obecně existují 4 skupiny
- Administrátoři databáze
- Návrháři databáze
- Příležitostní koncoví uživatelé
- Nativní koncoví uživatelé
Pokud však chcete udělit oprávnění na úrovni tabulky, možná budete muset trochu více větvit. To by naznačovalo, že 10 DB účtů je docela malá částka, několik stovek je pravděpodobnější .
Čím více privilegií, tím více místa je vyžadováno, ale jde o poměrně drobnou úvahu a nemělo by hrát velkou roli ve výkonu. Dalším problémem je složitost – dobře si rozmyslete, kolik skupin a permutací skutečně chcete testovat. V případě otázky výše jsem byl vývojář single hobbyist - jeden účet jako DBA je pravděpodobně v pořádku. Pokud by do DB přímo přistupovalo více uživatelů (již pravděpodobně špatný nápad pro vývojáře aplikací), možná je rozdělit s různými oprávněními.
Mluvit o oprávněních na úrovni tabulky pro jednoduchou aplikaci je prostě přehnané!