Uso de usuario de base de datos con mínimos privilexios

De MediaWiki
Ir a la navegación Ir a la búsqueda

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:

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:

Php Perm Minimos 1.jpg
  1. Prememos na sección User and privileges.
  2. Prememos o botón Add entry e escollemos o schema (base de datos) sobre a que queremos outorgar os permisos.
  3. Aparecerá o schema na lista.
  4. 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:

  1. Seleccionamos a base de datos
  2. Opción Privilegios.
  3. Aparecerá o usuario creado e poderemos editar os seus permisos.
Drupal instalacion mysql 7.jpg

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.