Está en la página 1de 10

Unidad IV: Seguridad

Tipos de usuario
El objetivo de la creacin de usuarios es establecer una cuenta segura y til,
que tenga los privilegios adecuados y los valores por defecto apropiados.
Para acceder a los datos en una BD, se debe tener acceso a una cuenta en esa
BD. Cada cuenta debe tener una palabra clave o password asociada.
Una cuenta en una BD puede estar ligada con una cuenta de sistema
operativo.
Los passwords son fijados cuando se crea un usuario y pueden ser alterados
por el DBA o por el usuario mismo.
La BD almacena una versin encriptada del password en una tabla del
diccionario llamada dba_users. Si la cuenta en la BD est asociada a una
cuenta del sistema operativo puede evitarse la comprobacin del password,
dndose por vlida la comprobacin de la identidad del usuario realizada por el
SO.
Un usuario tiene las siguientes caractersticas:
Un perfil de usuario, es decir las restricciones o privilegios de su cuenta. Una
cuenta MySQL se define en trminos de un nombre de usuario y el equipo o
equipos desde los que el usuario puede conectar al servidor. La cuenta tambin
tiene una contrasea (deseable). Los nombres de usuario y contraseas en
MySQL no estn relacionadas con los del sistema operativo.
Nombre de usuarios en MySQL pueden tener como mximo 16 caracteres de
longitud

Cuando instalamos MySQL, se crea el super usuario llamado root, el cual


dispone de todos los privilegios sobre el servidor de base de datos. Como una
buena prctica de seguridad para el servidor de base de datos es
recomendable que no se proporcione la cuenta del root para que se autentique
una persona o un sistema desarrollado en algn lenguaje de programacin. La
alternativa de solucin es la creacin de usuarios que tengan asignados ciertos
privilegios sobre las bases de datos almacenadas en nuestro servidor. En otras
palabras, con MySQL podemos crear usuarios limitados en las acciones que
pueden realizar sobre el servidor de base de datos.
MySQL ofrece 5 niveles de privilegios que se les pueden asignar a los usuarios
que se creen dentro del servidor de base de datos:
1.
2.
3.
4.
5.

Globales: es el nivel ms alto de privilegios ya que se aplican al conjunto


de todas las bases de datos del servidor.
Base de datos: se aplican a una base de datos en particular y a todos los
objetos que la componen.
Tabla: se aplican a una tabla en particular y a todas las columnas que
componen dicha tabla
Columna: se aplica a una columna en una tabla en particular
Rutina: se aplican sobre los procedimientos almacenados creados en una
base de datos.

Creacin de usuarios
Tres opciones.

1. La forma clsica, con la sentencia GRANT


Utilizando la sentencia GRANT podemos crear un usuario a la par que otorgarle
uno o varios privilegios sobre los objetos de una base de datos, o la base de
datos
completa.
Al encontrarse una sentencia de tipo GRANT, el motor de MySQL revisa si el
usuario existe previamente para el contexto que estamos asignndole
permisos, y si dicho usuario no est presente en el sistema, lo crea.
GRANT <tipo de sentencias permitidas>
ON <base de datos>
TO <Nombre del usuario>@<servidor permitido>
IDENTIFIED BY clave del usuario;

Por lo que para crear un usuario con todos los privilegios


escribiramos:
GRANT ALL ON *.* TO nombre_del_usuario@localhost IDENTIFIED BY
alguna_clave
Conectarse desde otro servidor
Si adems de tener todos los privilegios queremos que este usuario se conecte
desde otro servidor entonces sera:
GRANT ALL ON *.* TO nombre del usuario@algunservidor.com IDENTIFIED BY
alguna_clave;

o desde cualquier servidor:

GRANT ALL ON *.* TO nombre del usuario@% IDENTIFIED BY alguna_clave;


GRANT ALL ON *.* TO nombre del usuario@%.gov.ec IDENTIFIED BY
alguna_clave;

Esto es especialmente til si nos queremos conectar desde nuestro


computador al servidor de la base de datos a travs de una interfaz grfica.

Los usuarios tienen el formato nombre@host_acceso.


Usuario paco accede desde la misma maquina
paco@localhost equivalente a paco@'127.0.0.1' y paco@'nombre_host'

Usuario paco acceder desde un ordenador del dominio pacopil.com


paco@'pacopil.com'

Usuario paco accede desde la red local 192.168.1.0


paco@'192.168.1.%' equivalente a paco@'192.168.1.0/255.255.255.0'

Usuario paco accede desde una ip especifica 192.168.1.154


paco@'192.168.1.154'

Usuario paco accede desde cualquier servidor


paco@% equivalente a paco

2. CREATE USER:
A partir de la versin MySQL 5.0.2 existe la posibilidad de crear usuarios sin
necesidad de asignarles privilegios, utilizando la sentencia CREATE USER.
CREATE USER 'nombre_usuario'@'localhost' IDENTIFIED BY
'tu_contrasena';

Lamentablemente, a este punto el nuevo usuario no tiene permisos para hacer


algo con las bases de datos. Por consecuencia si el usuario intenta identificarse
(con la contrasea establecida), no ser capaz de acceder a la consola de
MySQL.
Por ello, lo primero que debemos hacer es proporcionarle el acceso requerido al
usuario con la informacin que requiere.
GRANT ALL PRIVILEGES ON * . * TO 'nombre_usuario'@'localhost';
Los asteriscos en este comando hacen referencia a la base de datos y la tabla
(respectivamente) a la cual el nuevo usuario tendr acceso; especficamente
este comando permite al usuario leer, editar, ejecutar y realizar todas las
tareas en todas las bases de datos y tablas.
Una vez que has finalizado con los permisos que deseas configurar para tus
nuevos usuarios, hay que asegurarse siempre de refrescar todos los privilegios.
FLUSH PRIVILEGES;
Aqu est una pequea lista del resto de los posibles permisos que los usuarios
pueden gozar.
ALL PRIVILEGES: como mencionamos previamente esto permite a un

usuario de MySQL tener todos los privilegios.

CREATE: permite crear nuevas tablas o bases de datos.

DROP: permite eliminar tablas o bases de datos.

DROP USER usuario_prueba@localhost;

DELETE: permite eliminar registros de tablas.

INSERT: permite insertar registros en tablas.

SELECT: permite leer registros en las tablas.

UPDATE: permite actualizar registros seleccionados en tablas.

With GRANT OPTION: permite asignar permisos a otros usuarios:.


Esta opcin y permite delegar los privilegios en otro usuario.
Los privilegios se almacenan en cuatro tablas del sistema, dentro de la base
de datos mysql. Estas cuatro tablas se denominan mysql.user, mysql.db,
mysql.table_priv ymysql.colms_priv y se relacionan directamente con los
cuatro niveles de privilegio mencionados anteriormente. Como alternativa a
GRANT, puede alterar estas tablas directamente.

La sintaxis y modo de uso del comando sera la siguiente:

GRANT ON privilegios TO 'usuario'@'host_de_conexion' IDENTIFIED BY


'password' WITH GRANT OPTION;
o

GRANT ALL PRIVILEGES ON *.* TO 'foo'@'localhost' IDENTIFIED BY


'mipassword'

WITH GRANT OPTION;

Otros comandos.
REVOKE
Es el contrario al comando opuesto al GRANT. Se utiliza para retirar privilegios
de un usuario.
Su sintaxis es muy similar a la sintaxis de GRANT:
REVOKE privilegios [(columnas)]
ON elemento
FROM nombre_de_usuario

Si se ha concedido privilegios con la clusula WITH GRANT OPTION, puedes


revocarlos de la siguiente forma:
REVOKE GRANT OPTION
ON elemento
FROM nombre_de_usuario
Ejemplos de GRANT y REVOKE.
Para configurar un administrador, podemos escribir:
grant all on * to julia identified by 'Qe4w' with grant option;
Aqu podemos observar que hemos dado a julia todos los privilegios sobre
todas las Bases de Datos existentes, con la contrasea Qe4w
Este tipo de privilegio solo es aconsejable para los administradores, y no para
el usuario; por lo que conviene quitrselos por mayor seguridad.
revoke all on * from julia;
Pero cmo podemos configurar un usuario normal?
grant usage on peliculas .* to julia identified by 'Qe4w';
A partir de ahora le concedemos los privilegios en funcin de los que nos ha
pedido hacer, poniendo los privilegios adecuados
grant select, insert, update, delete, index, alter, create, drop on peliculas .* to
julia;

Como ya hemos creado la contrasea al crear un usuario sin privilegios, no


hace falta ponerla, con poner los privilegios nos basta.
Pero resulta que julia no ha respetado las normas que se le dijo y queremos
quitarle privilegios:
revoke alter, create, drop on pelculas .* from julia;
Si al final nos comunica que no quiere ms ser usuario de nuestra BD
pondremos revocar:

revoke all on peliculas.* from julia;

Visualizar privilegios de un usuario con:


El comando SHOW GRANTS sirve para visualizar los privilegios asignados a un
usuario:
Ver privilegios de un usuario
mysql> show grants for nombre_usuario@cliente

Ver usuario actual


select current_user();

Ver Usuarios creados


select user,host from mysql.user;

Modificar nombre usuario


rename nombre_viejo to nombre_nuevo
Modificar contrasea
set password for nombre_usuario=password('nueva_contrasea')

Privilegios
Globales.
GRANT ALL ON *.* TO 'someuser'@'somehost';

GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';


BD.
GRANT ALL ON mydb.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';

Tabla.
GRANT ALL ON mydb.mytbl TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON mydb.mytbl TO 'someuser'@'somehost';

Columna
GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO
'someuser'@'somehost';

Rutina.
Los privilegios CREATE ROUTINE, ALTER ROUTINE, EXECUTE y GRANT se aplican
a rutinas almacenadas. Pueden ser concedidos en los niveles globales y de
base de datos. Adems, excepto para CREATE ROUTINE, estos privilegios
pueden ser concedidos en el nivel de rutina para rutinas individuales y se
almacenan en la tabla mysql.procs_priv.
GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

3. Insertando en la tabla users


Este es un mtodo que MySQL no recomienda demasiado, es un poco ms
complejo que los otros dos, pero va bien a la hora de resolver problemas, como

que por ejemplo alguno de las formas anteriores est dando algn problema
extrao.
Para ello es necesario un usuario con privilegio INSERT en la base de datos
mysql. Tambin se ha de tener mucho cuidado con esta base de datos, ya que
contiene toda la informacin de usuarios y permisos.
Ejemplo de creacin del usuario mariano usando INSERT en nuestra base de
datos. Nos conectamos con un usuario con privilegios, en este caso root, y
seleccionamos la base de datos mysql mediante la sentencia USE.
INSERT INTO user
VALUES('localhost','mariano',PASSWORD('pass_mariano'),'Y','Y',
'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N',
'N','N','N','','','','',0,0,0,0);

Para mostrar la tabla user:


Select * from mysql.user;

También podría gustarte