Uso de usuario de base de datos con mínimos privilexios
Sumario
Introducción
Sempre debemos ter en mente a seguridade de acceso aos datos gardados nunha base de datos.
A nivel académico e por simplicidade pedagóxica, e común que o usuario que usamos para acceder á base de datos teña asinado todos os permisos sobre a mesma. No mundo real e entornos en produción esta práctica non é aconsellable! O usuario terá asinado os permisos mínimos necesarios para que poida utilizar a aplicación.
Supostos no acceso de base de datos
Cando creamos unha aplicación web podemos ter varios supostos no que se refire ao acceso á base de datos.
- Temos creado en MySQL un usuario diferente por cada usuario, de tal forma que a cadea de conexión á base de datos a crearemos en base ao usuario/password introducido dende unha páxina PHP.
- Utilizamos o mesmo usuario MySQL para acceder á base de datos e temos unha táboa de usuario/password. En función do usuario validado, este terá acceso a diferentes páxinas PHP con diferentes funcionalidades.
- Utilizamos o mesmo usuario MySQL para acceder á base de datos e todos os usuarios do sitio web poden ter acceso ás mesmas páxinas.
En calquera destes supostos, o usuario que empreguemos para acceder a MYSQL debe ter os permisos mínimos para poder funcionar no noso sitio web.
Asignación de permisos mínimos a un usuario
Partimos de que temos creado un usuario en MySQL, que vai ser o usuario que imos utilizar no noso sitio web para conectarnos a MySQL e queremos darlle os permisos mínimos.
Se a nosa aplicación fai as operacións contra a base de datos empregando sentenzas SQL (SELECT/INSERT/UPDATE/DELETE) deberemos outorgar os permisos E SÓ os permisos necesarios para facer as operacións sobre as táboas da nosa base de datos, facendo uso de:
- a orde grant para otorgar un permiso a un usuario
- a orde revoke, para quitar un permiso a un usuario.
No caso de SELECT e UPDATE, podemos otorgar permisos a nivel de columnas: podemos especificar qué columnas dunha táboa vai ter permiso para poder ser seleccionadas ou actualizadas.
Gráficamente
MySQL WorkBench
Co MySQL WorkBench, podemos asociar os permisos graficamente:
- Prememos na sección User and privileges.
- Prememos o botón Add entry e escollemos o schema (base de datos) sobre a que queremos outorgar os permisos.
- Aparecerá o schema na lista.
- Agora na parte baixa aparecerán os permisos que podemos outorgar. Fixarse que os marcados son os permisos de SELECT/INSERT/UPDATE/DELETE
Nota. Así estaremos dando o permiso sobre todas as táboas creadas na base de datos.
phpmyadmin
Se estamos a utilizar a ferramenta Phpmyadmin:
- Seleccionamos a base de datos
- Opción Privilegios.
- Aparecerá o usuario creado e poderemos editar os seus permisos.
Executando ordes grant
Se queremos dar un permiso individual a unha táboa usaremos a orde grant. Esta será a opción a escoller se queremos otorgar un permisos mínimos a nosa base de datos:
Nota. A orde grant, cando fai referencia a un obxecto (coma unha táboa) pode indicarse o nome da base de datos e o nome do obxecto así: bd.obxecto Nos exemplos seguintes omitimos o nome da base de datos e supoñemos que xa está seleccionada (activa) a base de datos sobre a que imos a executar as ordes.
- Permiso select sobre unha táboa.
1 grant select on TABOA to 'novo_usuario';
- Permiso select sobre unha columna dunha táboa.
1 grant select (columna) on TABOA to 'novo_usuario';
- Permiso update sobre unha táboa.
1 grant update on TABOA to 'novo_usuario';
- Permiso update sobre unha columna dunha táboa.
1 grant update (columna) on TABOA to 'novo_usuario';
NOTA. Para os permisos DELETE e INSERT soamente é necesario poñer na orde grant a operación igual que nos casos anteriores.