MySQL
Безопасность через ГРАНТ
Поиск…
Лучшая практика
Ограничить root (и любого другого пользователя с привилегией SUPER) до
GRANT ... TO root@localhost ...
Это предотвращает доступ с других серверов. Вы должны передать СУПЕР очень мало людей, и они должны осознавать свою ответственность. Приложение не должно иметь SUPER.
Ограничить использование приложений для одной базы данных, используемой им:
GRANT ... ON dbname.* ...
Таким образом, кто-то, кто взламывает код приложения, не может пройти мимо dbname. Это может быть дополнительно уточнено с помощью любого из них:
GRANT SELECT ON dname.* ... -- "read only"
GRANT ... ON dname.tblname ... -- "just one table"
В readonly также могут быть «безопасные» вещи, такие как
GRANT SELECT, CREATE TEMPORARY TABLE ON dname.* ... -- "read only"
Как вы говорите, нет абсолютной безопасности. Я хочу сказать, что вы можете сделать несколько вещей, чтобы замедлить хакеров. (То же самое касается честных людей.)
В редких случаях вам может понадобиться приложение, чтобы сделать что-то доступное только для root. это можно сделать с помощью «Хранимой процедуры», в которой установлен SECURITY DEFINER
(и определяет корень). Это покажет только то, что делает SP, что может быть, например, одним конкретным действием в одной конкретной таблице.
Хост (пользователя @ host)
«Хост» может быть либо именем хоста, либо IP-адресом. Кроме того, он может включать в себя дикие карты.
GRANT SELECT ON db.* TO sam@'my.domain.com' IDENTIFIED BY 'foo';
Примеры: Примечание: обычно их нужно указывать
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.)
Использование localhost
зависит от безопасности сервера. Для лучшей практики root
должен разрешаться только через localhost. В некоторых случаях это означает одно и то же: 0.0.0.1
и ::1
.