Usuarios

Los usuarios son aquellas entidades que registramos en la base de datos, ellos tienen acceso a la misma mediante los privilegios que determina el administrados. Estos usuarios pueden ser finales o normales, especializado, programadores y administradores. Es recomendable tener una estrucutra de los privilegios que vamos a otorgar a los usuarios de la base de datos.

Creación de usuarios

Para la creación de un usuario hacemos uso la orden CREATE USER que permite añadir multiples opciones::

CREATE USER [IF NOT EXISTS]
    user [auth_option] [, user [auth_option]] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...

Desgranando la sintaxis:

  • user : Indicamos el nombre del usuarios y desde donde se va a conectar, ‘nombre_usuario’@’host’.

  • auth_option : Pemite asignar una contraseña para el usuario, podemos hacer uso de
    • IDENTIFIED BY ‘auth_string’ Password en texto plano.
    • IDENTIFIED BY PASSWORD ‘hash_string’ El hash del password(RECOMENDABLE)
  • resource_option: Restricciones sobre las acciones que puede realizar por ejemplo el numero queries maximas por horas, actualizaciones, conecciones.. sus opciones MAX_QUERIES_PER_HOUR count, MAX_UPDATES_PER_HOUR count, MAX_CONNECTIONS_PER_HOUR count, MAX_USER_CONNECTIONS count.

  • password_option : Opción para la expiración del password, acepta: PASSWORD EXPIRE, PASSWORD EXPIRE DEFAULT, PASSWORD EXPIRE NEVER y PASSWORD EXPIRE INTERVAL N DAY

  • lock_option : Para decir que el usuario esta bloqueado usamod ACCOUNT LOCK y para desbloquear ACCOUNT UNLOCK

Creación de un usuario que sólo podrá acceder desde el propio servidor que expira en diez días:

CREATE USER 'jonatan'@'localhost' IDENTIFIED BY 'asd2a3s12S ' PASSWORD EXPIRE INTERVAL 10 DAY;

Creacion de un usuarios que podrá acceder desde cualquir host:

CREATE USER 'jonatan'@'*' IDENTIFIED BY 'asd2a3s12.@';

Eliminación de usuarios

Para la eliminacion del usuarios usamos la sentencia DROP USER:

DROP USER user;

Asignación de derechos a usuarios

Para otorgar privilegios a los usuarios haremos uso se la orden GRANT su sintaxis es la siguiente:

GRANT tipo_privilegio [(columnas)] [, tipo_privilegio [(columnas)]]
ON { nombre_tabla | * | *.*  | base_datos.* }
TO usuario [IDENTIFIED BY [PASSWORD] 'pasword'] [, usuario [IDENTIFIED BY [PASSWORD] 'password']]
[WITH option [opcion]]

Desgranando la sintaxis:

  • Tipo_privilegio:

    Es la clase se privilegio que va ser otorgado al usuario, el tipo de permiso es muy variado: ALTER, SELECT, CREATE USER, CREATE VIEW, INSERT, DROP, GRANT OPTION*(Permite dar permisos), *ALL (Permisos simples excepto GRANT OPTION)....

  • Expresiones:

    Los privilegios se pueden aplicar a las siguientes expresiones

    Expresión Se aplica a
    nombre_tabla La tabla nombre_tabla
    ‘*’ Todas las tablas de la base de datos que se está usando
    . Todas las tablas de todas las bases de datos
    base_datos.* Todas las tablas de la base de datos base_datos
    base_datos.nombre_tabla Solo la tabla de la base de datos
  • WITH:

    Este clausula permite añadir otro tipo de privilegios

    Expresión Función
    GRAN OPTION Permite al usuario conceder sus permisos a otros usuarios
    MAX.QUERIES_PER_HOUR count Restringe el número de consultas por horas al usuario.
    MAX.UPDATE_PER_HOUR count Permite restringir el número de modificaciones por hora.
    MAX.CONNECTIONS_PER_HOUT count Indica el numero de conexiones por hora que realiza el usuario.
    MAX.USER_CONNECTIONS count Limita el número de conexiones simultáneas que puede tener un usuario.

Ejemplo de asignacion de permisos en MySQL.:

# Necesitamos un administrador para nuestro CMS de Wordpess
GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost'
IDENTIFIED BY 'password';

# Permisos de select e insert a todas las tablas de wordpress
GRANT SELECT, INSERT ON wordpress.* TO 'user'@'localhost'
IDENTIFIED BY 'password';

# Otorgamos permiso de select a todas las tabla de todas las bases de datos
# y permite otorgar este eprmiso a otros
GRANT SELECT ON *.* TO 'consultor'@'localhost'
IDENTIFIED BY 'password' WITH GRAN OPTION;

Desasignación de derechos a usuarios

La sentencia REVOKE deniega permisos a un usuarios sobre un objeto. Su sintaxis es la siguiente:

REVOKE
tipo_privilegio [(column_list)] [, priv_type [(column_list)]] ...
ON  { nombre_tabla | * | *.*  | base_datos.* }
FROM usuarios [, usuarios ]...

Aplicar la sintaxis es muy parecida a la sentencia GRANT, por ejemplo vamos a quitar permisos de SELECT al usuarios ‘wordpressconsultor’:

REVOKE SELECT on  wordpress.comentarios
from 'wordpressconsultor'@'localhost';

Tambien podemos hacer uso de las expresiones:

REVOKE INSERT,UPDATE  on wordpressconsultor.* from 'jonatan'@'localhost';