Jag kämpade med det här för alla år sedan, så här är svaret jag önskar att jag hade:
Generellt sett är detta att överkomplicera saker och ting, och huvudsvaret för en grundläggande applikation är:användarnas behörigheter kommer att hanteras av PHP-koden i API-anropen du gör, och en DB-användare är bra. Alla användare bör undvika att interagera direkt med DB för apputveckling i allmänhet, för att förhindra att data kränks.
Det är bra att tänka på säkerhet och begränsningar, men enkelheten är kung - ju mer komplex du gör det, desto svårare är det att underhålla, och därför är det lättare att missa hörnfodral.
Ska jag skapa en ny databasanvändare när jag registrerar en ny webbanvändare?
Nej, databasanvändare kännetecknas av sina privilegier. Som ett resultat överensstämmer alla användare med en uppsättning grupper med olika behörighetsnivåer. Databaskontona är separata från webbkonton - koppling till databasen görs bakom kulisserna och har ingen länk till webbkontot som används.
Ett bra tillvägagångssätt skulle vara att skapa ett DB-konto för varje tjänst som ansluter direkt till DB. För de allra flesta kommer detta att vara en tjänst, din webbserver. Om applikationen växer och isolerade tjänster som revisioner, mikrotjänster, säkerhet, IOT dyker upp bör de förmodligen ha sina egna konton.
Är CRUD-privilegier säkra att ge alla användare av webbplatsen?
Frågan är missriktad - du ger CRUD till DB-kontot, som kommer att behöva det. För CRUD-behörigheterna som hanteras i PHP beror det verkligen på din app och specifika slutpunkter. Till exempel vill du förmodligen inte att alla dina användare ska kunna ta bort användarposter, så din PHP-kod bör förhindra att det händer.
Hur många olika typer av DB-användare ska det finnas?
Antalet beror på din databas. I allmänhet finns det 4 grupper
- Databasadministratörer
- Databasutvecklare
- Cusual slutanvändare
- Inbyggda slutanvändare
Men om du vill ge privilegier på bordsnivå kan du behöva förgrena dig lite mer. Detta skulle tyda på att 10 DB-konton är en ganska liten summa, flera hundra är mer sannolikt .
Ju fler privilegier, desto mer utrymme krävs, men det är ett ganska litet övervägande och borde inte spela någon stor roll i prestanda. Komplexitet är nästa fråga - tänk noga på hur många grupper och permutationer du faktiskt vill testa. När det gäller frågan ovan var jag en ensam hobbyutvecklare - ett konto som DBA är förmodligen bra. Om det fanns flera användare som direkt fick åtkomst till DB (förmodligen redan en dålig idé för apputveckling), kan du kanske dela ut dem med olika behörigheter.
Att prata om tabellnivåbehörigheter för en enkel app är helt enkelt överdrivet!