Vous êtes sur la page 1sur 11

Seguridad

Cuentas de usuario en MySQL

Para conservar la integridad de los datos y de las estructuras ser conveniente


contar con varios usuarios controlando las tareas que cada uno pueda realizar.

En MySQL el nombre de un usuario est compuesto por el nombre seguido del


signo @ y despus el ordenador desde el que dicho usuario se conecta, porque se
asume que no es lo mismo el usuario user@192.168.1.35 que user@192.168.1.36,
es decir hay diferentes usuarios de nombre user y tendrn por tanto diferentes
privilegios segn de qu user hablemos en base a la mquina o la red desde la
que se conectan.

A partir de esta idea, cuando un usuario se conecta primero se comprueba si tiene


permiso para hacerlo (suponiendo que la contrasea sea correcta). Despus cada
operacin que intenta realizar ser controlada para saber si se permite o no.

Es necesario tener clara la diferencia entre usuarios, roles, perfiles, permisos.

Un rol es una forma de agrupar permisos (o privilegios) para asignarlos luego a los
usuarios.

Los permisos se asignan mediante la sentencia GRANTy se quitan mediante la


sentenciaREVOKE.

Creacin de usuarios

CREATE

USER

usuario

'miClaveSecreta];

[IDENTIFIED

BY

El nombre de usuario debe incluir el host, de otro modo usar el host '%' que
representa cualquier mquina (es un usuario global).
No es obligatorio el apartado IDENTIFIED BY que permite indicar la contrasea; si no
se hace uso de l, la contrasea del usuario queda en blanco (situacin no
recomendable).

DROP USER usuario;


Borrar Usuario. Si el usuario tiene sesin abierta, no se cierra la sesin sin embargo
se revocan inmediatamente los permisos.
Tambin podemos crear el Usuario al memento de asignar los privilegios pero ser
necesario incluir en todo caso [identified by password]

Niveles de Privilegios
EnMySQLexisten cinco niveles distintos de privilegios:
Globales:se aplican al conjunto de todas las bases de
datos en un servidor. Es el nivel ms alto de
privilegio, en el sentido de que su mbito es el ms
general.
De base de datos:se refieren a bases de datos
individuales, y por extensin, a todos los objetos que
contiene cada base de datos.
De tabla:se aplican a tablas individuales, y por lo
tanto, a todas las columnas de esas tabla.
De columna:se aplican a una columna en una tabla
concreta.
De
rutina:se
almacenados.

aplican

los

procedimientos

Privilegios a Usuarios
GRANT (conceder un privilegio a un usuario o a un rol)
REVOKE (denegar un privilegio a un usuario o a un rol)
GRANT
TO
ALL
USER
LISTA DE PRIVILEGIOS:
[@LOCALHOST]
INSERT, DELETE, UPDATE,
[IDENTIFIED BY password]
CREATE, DROP, SELECT
, [USER2]
ALTER, RELOAD, SHUTDOWN,
INDEX, SHOW DATABASES,
[WITH
LOCK TABLES, EXECUTE,
GRANT OPTION]
CREATE USER
MAX_QUERIES_PER_HOUR n ]
[(.NOMBRE DE COLUMNA)]
MAX_UPDATES_PER_HOUR n ]
ON
MAX_CONNECTIONS_PER_HOUR n ]
*.*
MAX_USER_CONNECTIONS n ]
DB.*
(Concurrencia)
DB.TABLA
DB.VISTA

Privilegios del usuario

GRANT priv_type [(column_list)] [,


priv_type [(column_list)]] ON
priv_level TO user , user [WITH {GRANT
OPTION | resource_option} ...]

Si no asignamos with grant option, no se le permitir dar permisos aunque sea un Usuario
global.

La tabla mysql.user contiene la lista completa de usuarios. Modificar esta tabla


permite modificar los usuarios, por lo que las instrucciones INSERT, DELETE o UPDATE
en esta tabla aaden, modifican o eliminan usuarios
El comando UPDATE sobre la tabla de usuarios, mysql.user, es la forma habitual de
hacerlo, (podremos modificar al mismo tiempo por todos los host del usuario) pero
necesitamos invocar al comando FLUSH PRIVILEGES para que los cambios se
realicen al instante. Ejemplos:
UPDATE mysql.user SET host='192.168.1.%' WHERE user='opersys';
UPDATE mysql.user SET password=PASSWORD('123456') WHERE user='clara';
FLUSH PRIVILEGES;

Otra forma de cambiar contrasea:


set password for U_Tablas=password("22222");

Visualizar Usuarios creados:


SELECT host, user, password FROM mysql.user;
Visualizar Permisos de un usuario:
SHOW GRANTS FOR user;

Remover privilegios del usuario


REVOKE nombre_privilegio [columnas][,

nombre_privilegio columnas] ON
elemento from
nombre_usuario[@localhost];
Para quitar los permisos sobre una tabla en particular el Usuario debe
tener los permisos asignados sobre esa tabla y no de manera global.

Nivel global. Se aplican a todas las bases de datos de un servidor dado. Estos
privilegios se almacenan en la tablamysql.user
GRANT privilegio ON*.* to usuario [IDENTIFIED BY clave];
REVOKE ALL ON*.* from usuario;
Nivel de base de datos. Se aplican a todos los objetos en una base de datos dada.
se almacenan en la tablamysql.db
GRANT ALL ONdb_name.* to usuario;
REVOKE ALL ONdb_name.* from usuario;
Nivel Tabla. Se aplican a todas las columnas de una tabla dada. Estos privilegios se
almacenan en la tablamysql.tables_priv.
GRANT ALL ONdb_name.tbl_name to usuario;
REVOKE ALL ONdb_name.tbl_name from usuario;
Nivel Columna. Se aplican a una sola columna de una tabla es especifico. Estos
privilegios se almacenan en la tablamysql.tables_priv
GRANT privilegio(columna) ONdb_name.tbl_name to usuario;
REVOKE privilegio(columna) ONdb_name.tbl_name from usuario;

Privilegios de usuarios
Los nicos privilegios que puede especificar para una tabla son
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT OPTION,
INDEX, y ALTER.
Los nicos privilegios que se puede especificar para una columna
son SELECT, INSERT, y UPDATE.
Los nicos valores que puede especificar a nivel de rutina son
ALTER ROUTINE, EXECUTE, y GRANT OPTION.