MySQL
Beveiliging via SUBSIDIES
Zoeken…
Beste oefening
Beperk root (en elke andere SUPER-bevoorrechte gebruiker) tot
GRANT ... TO root@localhost ...
Dat voorkomt toegang vanaf andere servers. Je moet SUPER uitdelen aan heel weinig mensen, en zij moeten zich bewust zijn van hun verantwoordelijkheid. De applicatie mag geen SUPER hebben.
Beperk toepassingsaanmeldingen tot de ene database die het gebruikt:
GRANT ... ON dbname.* ...
Op die manier kan iemand die de toepassingscode hackt, niet voorbij dbname komen. Dit kan verder worden verfijnd via een van deze:
GRANT SELECT ON dname.* ... -- "read only"
GRANT ... ON dname.tblname ... -- "just one table"
De readonly kan ook 'veilige' dingen nodig hebben zoals
GRANT SELECT, CREATE TEMPORARY TABLE ON dname.* ... -- "read only"
Zoals u zegt, er is geen absolute beveiliging. Mijn punt hier is dat je een paar dingen kunt doen om hackers te vertragen. (Hetzelfde geldt voor eerlijke mensen die gek zijn.)
In zeldzame gevallen is het mogelijk dat de toepassing iets nodig heeft dat alleen beschikbaar is om te rooten. dit kan worden gedaan via een "Opgeslagen procedure" met SECURITY DEFINER
(en root definieert dit). Dat zal alleen blootleggen wat de SP doet, wat bijvoorbeeld een bepaalde actie op een bepaalde tafel kan zijn.
Host (van gebruiker @ host)
De "host" kan een hostnaam of een IP-adres zijn. Het kan ook wildcards zijn.
GRANT SELECT ON db.* TO sam@'my.domain.com' IDENTIFIED BY 'foo';
Voorbeelden: Opmerking: deze moeten meestal worden geciteerd
localhost -- the same machine as mysqld
'my.domain.com' -- a specific domain; this involves a lookup
'11.22.33.44' -- a specific IP address
'192.168.1.%' -- wild card for trailing part of IP address. (192.168.% and 10.% and 11.% are "internal" ip addresses.)
Het gebruik van localhost
afhankelijk van de beveiliging van de server. Voor de beste praktijk moet root
alleen worden toegestaan via localhost. In sommige gevallen betekent dit hetzelfde: 0.0.0.1
en ::1
.