sql >> Database >  >> RDS >> Mysql

Gebruikers van MySQL-applicaties versus databasegebruikers

Ik worstelde hier al die jaren geleden mee, dus hier is het antwoord dat ik graag had:

Over het algemeen is dit te ingewikkeld, en het hoofdantwoord voor een basistoepassing is:de machtigingen van gebruikers worden beheerd door de PHP-code in de API-aanroepen die u doet, en één DB-gebruiker is in orde. Alle gebruikers moeten directe interactie met de DB voor app-ontwikkelaars in het algemeen vermijden, om te voorkomen dat de heiligheid van de gegevens wordt geschonden.

Het is goed om na te denken over beveiliging en beperkingen, maar eenvoud is koning - hoe complexer je het maakt, hoe moeilijker het is om te onderhouden, en dus hoe gemakkelijker het is om hoekgevallen te missen.

Moet ik een nieuwe databasegebruiker maken wanneer ik een nieuwe webgebruiker registreer?

Nee, databasegebruikers onderscheiden zich door hun privileges. Als gevolg hiervan conformeren alle gebruikers zich aan een reeks groepen met verschillende privilegeniveaus. De database-accounts zijn gescheiden van de webaccounts - het verbinden met de database gebeurt achter de schermen en heeft geen link naar het gebruikte webaccount.

Een goede benadering zou zijn om een ​​DB-account aan te maken voor elke service die rechtstreeks verbinding maakt met de DB. Voor de overgrote meerderheid zal dit één service zijn, uw webserver. Als de applicatie groeit en services zoals audits, microservices, beveiliging en IOT opduiken, zouden ze waarschijnlijk hun eigen accounts moeten hebben.

Zijn CRUD-rechten veilig om aan alle gebruikers van de website te geven?

De vraag is misleidend - u geeft de CRUD aan de DB-account, die deze nodig heeft. Voor de CRUD-machtigingen die in de PHP worden beheerd, hangt het echt af van uw app en specifieke eindpunten. U wilt bijvoorbeeld waarschijnlijk niet dat al uw gebruikers gebruikersrecords kunnen verwijderen, dus uw PHP-code zou dat moeten voorkomen.

Hoeveel verschillende soorten DB-gebruikers moeten er zijn?

Het aantal is afhankelijk van uw database. Over het algemeen zijn er 4 groepen

  • Databasebeheerders
  • Databaseontwerpers
  • Tussentijdse eindgebruikers
  • Native eindgebruikers

Als u echter privileges op tabelniveau wilt verlenen, moet u mogelijk iets meer vertakken. Dit zou suggereren dat 10 DB-accounts vrij weinig is, enkele honderden is waarschijnlijker .

Hoe meer privileges, hoe meer ruimte er nodig is, maar het is een vrij kleine overweging en zou geen grote rol moeten spelen in de prestaties. Complexiteit is de volgende kwestie - denk goed na hoeveel groepen en permutaties je eigenlijk wilt testen. In het geval van de bovenstaande vraag was ik een enkele hobbyist-ontwikkelaar - één account als DBA is waarschijnlijk prima. Als er meerdere gebruikers rechtstreeks toegang hadden tot de database (waarschijnlijk al een slecht idee voor app-ontwikkelaars), splits ze dan misschien op met verschillende machtigingen.

Praten over machtigingen op tabelniveau voor een eenvoudige app is gewoon veel te overdreven!




  1. Ingewikkelde voetbalcompetitie Dynamisch bestellen in MySQL?

  2. PERIOD_DIFF() Voorbeelden – MySQL

  3. Hoe kan ik ALLE beurzen weergeven die een gebruiker heeft ontvangen?

  4. Is INSERT RETURNING gegarandeerd om dingen in de juiste volgorde te retourneren?