MySQL
Bezpieczeństwo za pośrednictwem GRANTÓW
Szukaj…
Najlepsze praktyki
Ogranicz root (i każdego innego użytkownika z uprawnieniami SUPER) do
GRANT ... TO root@localhost ...
To uniemożliwia dostęp z innych serwerów. Powinieneś rozdawać SUPER bardzo niewielu osobom, a one powinny być świadome swojej odpowiedzialności. Aplikacja nie powinna mieć SUPER.
Ogranicz logowanie aplikacji do jednej bazy danych, z której korzysta:
GRANT ... ON dbname.* ...
W ten sposób ktoś, kto włamie się do kodu aplikacji, nie będzie w stanie przeoczyć nazwy dbname. Można to dodatkowo ulepszyć za pomocą jednego z poniższych:
GRANT SELECT ON dname.* ... -- "read only"
GRANT ... ON dname.tblname ... -- "just one table"
Tylko do odczytu mogą również potrzebować „bezpiecznych” rzeczy
GRANT SELECT, CREATE TEMPORARY TABLE ON dname.* ... -- "read only"
Jak mówisz, nie ma absolutnego bezpieczeństwa. Chodzi mi o to, że możesz zrobić kilka rzeczy, aby spowolnić hakerów. (To samo dotyczy uczciwych ludzi wygłupiających się.)
W rzadkich przypadkach możesz potrzebować aplikacji, aby zrobić coś dostępnego tylko do rootowania. można tego dokonać za pomocą „Procedury SECURITY DEFINER
”, która ma SECURITY DEFINER
(i root ją definiuje). To ujawni tylko to, co robi SP, co może na przykład być jedną konkretną akcją na jednym stole.
Host (użytkownika @ host)
„Host” może być nazwą hosta lub adresem IP. Może również obejmować dzikie karty.
GRANT SELECT ON db.* TO sam@'my.domain.com' IDENTIFIED BY 'foo';
Przykłady: Uwaga: zazwyczaj należy je zacytować
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.)
Korzystanie z localhost
zależy od bezpieczeństwa serwera. Aby uzyskać najlepszą praktykę, root
powinno być dozwolone tylko przez localhost. W niektórych przypadkach oznaczają to to samo: 0.0.0.1
i ::1
.