MySQL
Säkerhet via GRANT
Sök…
Bästa praxis
Begränsa roten (och alla andra SUPER-privilegierade användare) till
GRANT ... TO root@localhost ...
Det förhindrar åtkomst från andra servrar. Du bör dela ut SUPER till mycket få människor, och de bör vara medvetna om sitt ansvar. Ansökan bör inte ha SUPER.
Begränsa applikationsinloggningar till den databas den använder:
GRANT ... ON dbname.* ...
På så sätt kan någon som går in i programkoden inte komma förbi dbname. Detta kan förfinas ytterligare via någon av dessa:
GRANT SELECT ON dname.* ... -- "read only"
GRANT ... ON dname.tblname ... -- "just one table"
Den readonly kan också behöva "säkra" saker som
GRANT SELECT, CREATE TEMPORARY TABLE ON dname.* ... -- "read only"
Som du säger finns det ingen absolut säkerhet. Min poäng här är att du kan göra några saker för att sakta hackare. (Samma sak gäller för ärliga människor.
I sällsynta fall kan du behöva applikationen för att göra något tillgängligt endast för rot. detta kan göras via en "lagrad procedur" som har SECURITY DEFINER
(och root definierar det). Det kommer bara att avslöja vad SP gör, vilket till exempel kan vara en viss åtgärd på ett särskilt bord.
Värd (av användaren @ värd)
"Värd" kan vara antingen ett värdnamn eller en IP-adress. Det kan också involvera jokertecken.
GRANT SELECT ON db.* TO sam@'my.domain.com' IDENTIFIED BY 'foo';
Exempel: Obs! Dessa måste vanligtvis citeras
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.)
Att använda localhost
förlitar sig serverns säkerhet. För bästa praxis bör root
endast tillåtas via localhost. I vissa fall betyder dessa samma sak: 0.0.0.1
och ::1
.