MySQL
Seguridad a través de GRANTs
Buscar..
Mejores prácticas
Limite la raíz (y cualquier otro usuario con privilegios SUPER) a
GRANT ... TO root@localhost ...
Eso impide el acceso desde otros servidores. Debe entregar SUPER a muy pocas personas y ellos deben ser conscientes de su responsabilidad. La aplicación no debe tener SUPER.
Limite los inicios de sesión de la aplicación a la base de datos que usa:
GRANT ... ON dbname.* ...
De esa manera, alguien que hackea el código de la aplicación no puede pasar el dbname. Esto puede ser refinado aún más a través de cualquiera de estos:
GRANT SELECT ON dname.* ... -- "read only"
GRANT ... ON dname.tblname ... -- "just one table"
La lectura solo puede necesitar cosas "seguras" como
GRANT SELECT, CREATE TEMPORARY TABLE ON dname.* ... -- "read only"
Como dices, no hay seguridad absoluta. Mi punto aquí es que puedes hacer algunas cosas para frenar a los hackers. (Lo mismo ocurre con las personas honestas que hacen el tonto).
En raras ocasiones, es posible que necesite la aplicación para hacer algo disponible solo para root. Esto se puede hacer a través de un "Procedimiento almacenado" que tiene SECURITY DEFINER
(y la raíz lo define). Eso expondrá solo lo que hace el SP, que podría ser, por ejemplo, una acción particular en una tabla en particular.
Host (del usuario @ host)
El "host" puede ser un nombre de host o una dirección IP. Además, puede implicar comodines.
GRANT SELECT ON db.* TO sam@'my.domain.com' IDENTIFIED BY 'foo';
Ejemplos: Nota: estos usualmente necesitan ser citados
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.)
El uso de localhost
basa en la seguridad del servidor. Para las mejores prácticas, la root
solo debe permitirse a través de localhost. En algunos casos, estos significan lo mismo: 0.0.0.1
y ::1
.