Jeg kæmpede med dette for alle de år siden, så her er det svar, jeg ville ønske, jeg havde:
Generelt overkomplicerer dette tingene, og overskriften for en grundlæggende applikation er:Brugernes tilladelser vil blive administreret af PHP-koden i de API-kald, du foretager, og en DB-bruger er i orden. Alle brugere bør undgå at interagere direkte med DB for app-udvikler generelt for at forhindre overtrædelse af dataenes hellighed.
Det er godt at tænke på sikkerhed og begrænsninger, men enkelhed er konge - jo mere kompleks du gør det, jo sværere er det at vedligeholde, og derfor er det lettere at gå glip af hjørnesager.
Skal jeg oprette en ny databasebruger, hver gang jeg registrerer en ny webbruger?
Nej, databasebrugere er kendetegnet ved deres privilegier. Som et resultat overholder alle brugere et sæt grupper med forskellige privilegieniveauer. Databasekontiene er adskilt fra webkontiene - tilslutning til databasen sker bag kulisserne og har intet link til den webkonto, der bruges.
En god tilgang ville være at oprette en DB-konto for hver tjeneste, der forbinder direkte til DB. For langt de fleste vil dette være én tjeneste, din webserver. Hvis applikationen vokser, og isolerede tjenester såsom revisioner, mikrotjenester, sikkerhed, IOT dukker op, skal de nok have deres egne konti.
Er CRUD-privilegier sikre at give til alle brugere af webstedet?
Spørgsmålet er forkert - du giver CRUD'en til DB-kontoen, som skal bruge den. For de CRUD-tilladelser, der administreres i PHP, afhænger det virkelig af din app og specifikke slutpunkter. For eksempel ønsker du sandsynligvis ikke, at alle dine brugere skal kunne slette brugerregistreringer, så din PHP-kode burde forhindre det i at ske.
Hvor mange forskellige typer DB-brugere skal der være?
Antallet afhænger af din database. Generelt er der 4 grupper
- Databaseadministratorer
- Databasedesignere
- Afslappede slutbrugere
- Native slutbrugere
Men hvis du vil give privilegier på bordniveau, skal du muligvis forgrene dig lidt mere. Dette tyder på, at 10 DB-konti er et ganske lille beløb, flere hundrede er mere sandsynligt .
Jo flere privilegier, jo mere plads kræves der, men det er en temmelig lille overvejelse, og burde ikke spille en stor rolle i præstationen. Kompleksitet er næste problem - tænk grundigt over, hvor mange grupper og permutationer du egentlig vil teste. I tilfældet med spørgsmålet ovenfor var jeg en enkelt hobbyudvikler - én konto som DBA er nok fint. Hvis der var flere brugere, der fik direkte adgang til databasen (allerede sandsynligvis en dårlig idé for app-udvikler), så kan du måske dele dem ud med forskellige tilladelser.
At tale om tilladelser på tabelniveau for en simpel app er bare overdrevet!