Está en la página 1de 9

ACCESO A LA INFORMACIÓN: USUARIOS Y PERMISOS

INTRODUCCIÓN

Hasta ahora, siempre hemos conectado al MariaDB, siempre desde el usuario root,
que es el administrador, y por tanto con todos los privilegios, y que tenemos con
contraseña en blanco, que desde luego, es algo inadmisible.

Para conservar, la integridad y la confidencialidad de los datos, es necesario que


algunos usuarios puedan realizar determinadas tareas, por lo que MariaDB, permite
asignar a cada uno de los usuarios determinados privilegios, existiendo distintos
niveles o categorías sobre ellos.

NIVELES DE PRIVILEGIOS.

 GLOBALES.- Se aplican al conjunto de todas las bases de datos del servidor. Es


el nivel más alto de privilegio, pues su ámbito es general.
 DE BASES DE DATOS.- Se aplican a una base de datos en concreto, y por
extensión a todos los objetos que contiene la base de datos.
 DE TABLA.- Se aplican a tablas individuales, y por tanto, a todas las columnas
de la misma.
 DE RUTINA.- Se aplican a los procedimientos almacenados.
 DE FUNCIÓN.- Igual que los anteriores.

GESTIÓN DE LA SEGURIDAD.

Es muy común, utilizar dos tipos de seguridad, la integrada en el S.O. y la


proporcionada por el gestor (nativa).

En la seguridad nativa, es el propio software del servidor, el que proporciona los


mecanismos mediante los cuales se autoriza a un usuario a gestionar los distintos
elementos de la base de datos. En MariaDB, parte del núcleo, incorpora funciones de
autentificar los usuarios y permitirles o restringirles el acceso a las diferentes partes de
la información.

El sistema de privilegios, se encarga de establecer, quién se puede conectar al servidor


y qué puede hacer una vez conectado.

-1-
Para conectarse hay que conocer los siguientes parámetros:

Servidor al que se va a conectar(IP), usuario, y contraseña. El nombre de usuario, está


formado por el nombre en sí, y el equipo al que se conecta(IP). EJ usuario@localhost.

Las cuentas y permisos que gestionan la seguridad, se almacenan en el DICCIONARIO


DE LA BASE DE DATOS. Algunas de las tablas implicadas son: user_privileges,
schema_privileges, table_privileges y column_privileges.

Todas estas tablas, se encuentran en la base de datos information_schema, en la cual,


el gestor va almacenando la información, pero el usuario no puede tocar nada.

Funcionamiento del sistema de privilegios.

 Etapa 1: El servidor comprueba si debe permitirle conectarse.


 Etapa 2: Asumiendo que se conecta, comprueba cada comando que ejecuta, si
tiene suficientes permisos para hacerlo.

La tabla user_privileges determina si se rechazan o se permiten conexiones entrantes.


Para las conexiones permitidas, cualquier privilegio otorgado en esta tabla indica
cuales son los privilegios globales del usuario. Estos privilegios se aplican a todas las
bases de datos del servidor.

La columnas de la tabla schema_privileges, determinan qué usuarios pueden acceder a


qué bases de datos de este equipo.

Las tablas table_privileges y column_privileges, son similares a schema_privileges, pero


más detalladas: se aplican a nivel de tabla o de columna.

NOMBRES DE USUARIOS Y CONTRASEÑAS.

El nombre de usuario en MariaBD, no es un nombre simple, está formado por el


nombre de usuario y el nombre del host al que el usuario se quiere conectar, ambos
tokens, están separados por el signo ‘@’, y se pueden delimitar por comillas simples o
dobles. Es decir, son de tipo char.

Los posibles host son:

 Cualquier ubicación: ‘usuario’@’%’


 Desde una máquina en concreto: ‘usuario’@’IP’
 Desde el mismo servidor de la base de datos: ‘usuario’@’localhost’
 Desde un rango de IPs: ‘usuario’@’ip/mascara’

Hay que tener mucho cuidado, si hay varios usuarios con el mismo nombre, en
diferentes host, MariaBD, ordena la lista y utiliza el primero para validar.

-2-
CREACIÓN DE USUARIOS Y CONCESIÓN DE PRIVILEGIOS.

La creación de usuarios y concesión de privilegios, permitirán al ADB, mantener la


seguridad en la base de datos. Sus tareas son:

 Crear usuarios para proporcionar entrada al sistema.


 Desarrollar las políticas de contraseñas.
 Asignar los permisos para que el usuario pueda acceder a distintos objetos del
sistema, para hacer tareas concretas desde dónde puede acceder.

En MariaDB, podemos crear cuentas de varios modos (vamos a verlo todo desde sql,
sin usar las opciones de Navicat):

La primera de ellas, utilizando la sentencia CREATE USER. La sintaxis de esta sentencia


es:

CREATE USER nombre_usuario [IDENTIFIED BY [PASSWORD] 'contraseña'].

La contraseña irá entre comillas y lo habitual es no poner la palabra password, para


que sea el gestor el que encripte la misma. El nombre será el del usuario@host. Si
omitimos lo que va entre corchetes, el usuario se creará sin contraseña.

-3-
Como podemos ver, al poner la palabra password, hemos tenido que poner, los 41
dígitos en hexadecimal que tiene asignada la password.

Esto es lo básico, en este formato, se puede por ejemplo, crear una cuenta que
caducidad de la cuenta, contraseñas y demás. Eso habrá que buscarlo de forma
puntual.

Otra forma, es usando la sentencia GRANT, con ella, podemos crear un usuario, y al
mismo tiempo concederle privilegios. Si asignamos privilegios, a una cuenta que no
existe, el sistema creará una, la sintaxis es:

GRANT tipo_privilegio [(columnas)] [,tipo_privilegio [(columnas)]] ...


ON { table tabla | * | *.* | basedatos.*}
TO usuario [IDENTIFIED BY [PASSWORD] 'password']
[, usuario [IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH GRANT OPTION]

Los permisos a conceder son:

 Todas las bases de datos (globales): ON *.*


 Una base de datos en concreto: ON nombre_db.*-
 Una tabla u otro objeto: ON table nombre_db.nombre_tabla (objeto)

Podemos entrar con cualquier nombre


de usuarios, puesto que MariaDB,
tiene creado un usuario, con una
cadena en blanco, que significa,
cualquier usuario.

Este usuario anónimo, tendrá acceso a las tablas test e information_schema.

-4-
La opción WHIH GRANT OPTION permite que el usuario al que le han concedido
permisos, pueda a su vez, concederlos a otros usuarios, si se los revocan a él, a su vez,
los pierden todos los usuarios a los que se los haya concedido.

Si al añadir privilegios se usa una clave diferente en la cláusula IDENTIFIED BY, la


contraseña se cambia por la nueva.

Algunos de los privilegios que se pueden conceder son:

 USAGE: No concede ningún privilegio real, se asigna al crear el usuario.


 SELECT: Consultas.
 ALL: Todos los privilegios.
 CREATE: Creación de objetos.
 DELETE: Uso de la sentencia delete.
 DROP: Borrado de objetos.
 INSERT: Insertar datos en tablas o vistas.
 UPDATE: Uso de sentencia Update.

Otra forma de asignar o eliminar permisos en MariaDB, es usando las tablas del
catálogo de metadatos, es decir, todas las tablas de las bases de datos mysql, creada al
hacer la instalación del gestor, y que almacena todos los objetos manejados por el
gestor.

En esta base de datos, mysql, existen 5 tablas relacionadas con el sistema de permisos
mysql, user, db, host, tables_priv y columns_priv. Estas tablas pueden ser
manipuladas, de forma manual.

La lista de privilegios es larga, podemos consultarla detalladamente en la dirección:

https://mariadb.com/kb/en/library/grant/#privilege-levels

BORRAR USUARIOS.

Para eliminar usuarios, se usa la sentencia DROP USER, eliminando también, lógicamente,
todos los permisos que este tenga.

MODIFICACIÓN DE USUARIOS.

Para modificar los usuarios en MariaDB, podemos utilizar la sentencia ALTER USER, en
versiones posteriores a la 10.2.

La versión que tenemos instalada, podemos verla con la sentencia “Select versión()”, o
también, en phpmyadmin, aparecen todos los datos en la pantalla de bienvenida.

-5-
Por tanto en nuestro caso, la modificación habrá que hacerla en la propia tabla mysql.user, del
sistema.

Por ejemplo, la siguiente consulta modifica la password de un usuario:

UPDATE mysql.user SET Password = PASSWORD (“nuevaclave”)


WHERE user=’nombreusuario’ AND host=’localhost’;

La función PASSWORD, integrada en el lenguaje sql, encripta la password, para evitar


que se lea en la tabla mysql.user.

Modificando la tabla mysql.user, es posible realizar cualquier modificación en cuanto a


los usuarios del sistema, posteriormente es necesario ejecutar el comando FLUSH
PRIVILEGES, para forzar al gestor a volver a leer las tablas de permisos, y que estas
sean efectivas desde ese momento.

También se puede renombrar un usuario conservando todos sus privilegios, utilizando


el comando RENAME USER, y cambiar la password mediante el comando SET
PASSWORD:

RENAME USER usuario@dominio to nuevonombre@nuevodominio;

SET PASSWORD for usuario@dominio = PASSWORD(‘nuevaclave’);

-6-
Para poder utilizar estas sentencias es necesario que el usuario cumpla uno de los
siguientes requisitos:

 Tener activo el permiso global CREATE USER, que le permite hacer cualquiera
de las operaciones anteriores.
 Tener los permisos correspondientes sobre la BD mysql, que son:
o INSERT para realizar el comando create user.
o DELETE para poder usar el comando drop, que veremos después.
o UPDATE, para poder ejecutar los comandos rename y set pasword.

Otra forma de asignar y eliminar permisos en MariaDB, es utilizando directamente el


catálogo de metadatos de la BD, mysql, mencionados anteriormente.

REVOCAR PRIVILEGIOS.

Para revocar privilegios, se usa la sentencia REVOKE, cuya sintaxis es idéntica a la


sentencia GRANT.

Podemos ver, los privilegios que tiene un usuario, mediante la sentencia SHOW
GRANTS:

SHOW GRANTS FOR usuario;

-7-
ROLES DE USUARIOS.

La definición de roles, simplifica la administración de usuarios al permitir asignar de


forma rápida y sencilla todos los permisos que necesita un el usuario al asignarle un rol
o roles que necesita, sin tener que asignar dichos permisos uno a uno a cada uno de
ellos, teniendo luego la necesidad de tener que revocarlos y se escape alguno.

Para crear un rol utilizaremos:

CREATE ROLE nombreroll

Una vez creado el rol, con la sentencia GRANT, le otorgaremos permisos:

GRANT permisos TO nombrerol;

Para asignar todos los permisos que tiene un rol a un usuario:

GRANT nombrerol TO usuario;

Pero no basta con asignar el rol al usuario, una vez que este se conecte, tendrá que
activar, basta con ejecutar:

SET ROLE nombrerol;

Para evitar que el usuario tenga que activar el rol, se le puede asignar uno por defecto,
de forma que cuando se conecte, vaya implícito una orden set role:

SET DEFAULT ROLE nombrerol FOR usuario;

-8-
Es posible, que cuando borremos un usuario, y pretendamos crearlo de nuevo, el
gestor no nos lo permita, aunque éste, ya no esté en el catálogo.

Es posible, que al borrarlo, hayan quedado restos por algún lugar de catálogo. Para
solucionarlo, debes volver a borrarlo y actualizar, de forma que el gestor, vuelva a
revisar el catálogo. Ejecuta:

-9-

También podría gustarte