Está en la página 1de 29

Administr

ación de
Base de
Datos
GESTIÓN DE
CUENTAS

https://wiki.cifprodolfoucha.es/index.php?title=Mysql_Creaci
%C3%B3n_de_usuarios#Bloqueo_.2F_Desbloqueo_de_cuentas
Tipos de UsuarioS - administrador
El DBA (Database Administrator) es aquella persona o grupo de personas
que sostiene la máxima responsabilidad en el mantenimiento de una
SGDB. Sus funciones se pueden resumir en:

Definir el esquema lógico de la base de datos.


Definir el esquema físico.
Definir los subesquemas (lo que conocemos como vistas o consultas).
Llevar un mantenimiento de los mencionados esquemas.
Concretar qué procedimientos seguir para mantener la seguridad,
integridad y privacidad de los datos.
Tipos de UsuarioS
• Usuario especializado: Este tipo de usuario es el que desarrolla otros
sistemas más complejos a partir del SGBD. También caen en esta
categoría aquellos usuarios que utilizan el SGDB como fuente de
información específica para su labor, volcando grandes cantidades de
datos para su análisis en bloque.

• Usuario técnico: Son aquellos que elaboran aplicaciones del SGDB


para ser utilizadas por los usuarios finales.

• Usuario final: Usuarios no especializados. Utilizan las aplicaciones


diseñadas por los técnicos para manejar la base de datos. La
información que tratan está restringida al marco de su actividad
concreta por medio de los subesquemas (vistas) previamente definidos.
Complemento de validación
Uno de los eslabones más débiles del sistema de seguridad es la contraseña de
usuario desde donde puede entrar un atacante. Con el fin de mejorar la
solidez y la seguridad de las contraseñas, MySQL proporciona un
complemento llamado " Complemento de validación" que se puede configurar
para aplicar un conjunto de reglas para las contraseñas.
INSTALACION:
//Linux la extensión es .so
INSTALL PLUGIN validate_password SONAME 'validate_password.dll’;
INSTALL COMPONENT 'file://component_validate_password’;
COMPROBACION DE INSTLACION
SHOW PLUGINS;
ESTADO DE LAS VARIABLES
SHOW VARIABLES LIKE 'validate_password.%';
SHOW STATUS LIKE 'validate_password.%';
VARIABLES
mysql> show global variables like 'validate%';
+-----------------------------------------------------------------+--------------+
| Variable_name                        | Value   |
+-----------------------------------------------------------------+--------------+
| validate_password_check_user_ name. | OFF    |
| validate_password_dictionary_ file     | --_   |
| validate_password_ length             | 8      |
| validate_password_mixed_case_ count   | 1      |
| validate_password_number_ count       | 1      |
| validate_password_ policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+-----------------------------------------------------------------+--------------+
Instituto Nacional de Tecnología: consisten en una longitud mínima de 8 (o 6 para contraseñas de activación)

La contraseña solo se acepta si tiene al menos 8 caracteres, incluido 1 carácter especial, 1 numérico, 1 minúscula y 1 mayúscula como la
siguiente: mysql> set password = '123456Ab@’;
VARIABLES
Validate_password_policy : determina la política de seguridad de la
contraseña, que puede ser BAJA, MEDIA o FUERTE. Según la política que
se establezca, es posible que se ignoren algunas variables.
Política Variables comprobadas
0 o BAJO Longitud
1 o MEDIO Longitud; caracteres numéricos, minúsculas/mayúsculas y
especiales
2 o FUERTE Longitud; caracteres numéricos, en minúsculas/mayúsculas
y especiales; archivo de diccionario
-- Fijar una politica de seguridad baja SET GLOBAL validate_password.policy = 0 ;

-- Fijar una politica de seguridad media SET GLOBAL validate_password_policy = 1 ;

-- Fijar una politica de seguridad alta SET GLOBAL validate_password_policy = 2 ;


VARIABLES
Validate_password_mixed_case_count : número mínimo de caracteres en
mayúsculas y minúsculas
Validate_password_number_count : número mínimo de caracteres numéricos
Validate_password_special_char_count : número mínimo de caracteres no
alfanuméricos
Validate_password_check_user_name : si está habilitado, evita que un
usuario establezca una contraseña igual a su nombre de usuario o al revés.
Validate_password_dictionary_file : ruta para el archivo de diccionario con
un tamaño máximo de 1 MB que contiene una palabra por línea. No se puede
usar ninguna contraseña con una subcadena que coincida con cualquiera de
las palabras del diccionario, la verificación no distingue entre mayúsculas y
minúsculas y la longitud mínima del diccionario es de 4 letras por palabra.
Después de modificar el archivo del diccionario, “SET GLOBAL
VARIABLES
-- Fijar variables para reglas de contraseñas*/
SET GLOBAL validate_password_dictionary_file = '/tmp/dictionary.txt';

SET GLOBAL validate_password_length = 12 ;

SET GLOBAL validate_password_mixed_case_count = 2 ;

SET GLOBAL validate_password_number_count = 2 ;

SET GLOBAL validate_password_special_char_count = 2 ;


SET GLOBAL validate_password_check_user_name = 2 ;

Tener un archivo de diccionario con palabras prohibidas. Dado que el tamaño máximo del diccionario es de 1 MB, la cantidad
de palabras y patrones que pueden existir en el diccionario puede estar limitada a la implementación requerida de la política,
aunque también se deben implementar otras medidas, como el bloqueo de contraseña después de muchas fallas, para cumplir
con NIST.
POLITICAS DE SEGURIDAD
• El SGBD debe garantizar que la información esté accesible únicamente
a aquellos usuarios que estén autorizados, impidiendo el acceso en caso
contrario. En MySQL, esta función la realiza el sistema de privilegios,
el cual establece quién puede conectar al servidor. También garantiza
que cada usuario ejecute sólo aquellas operaciones para las que esté
autorizado.

• El servidor de MySQL trabaja con cuentas (nombre de host, usuario,


contraseña y privilegios) organizadas en el diccionario de datos. Al
acceder a él, primero se comprueba la identidad del usuario y a
continuación los permisos para hacer operaciones sobre la base de
datos. En ambas etapas se usan tablas user, db y host.
PERMISOS
La segunda etapa del control de acceso consiste en una serie de operaciones que
realiza el servidor para verificar que cada cliente tiene suficientes privilegios
para realizar sus peticiones. En este proceso, se accede a las tablas:
• user: permisos de acceso global.
• host: permisos de acceso al servidor..
• db: permisos a nivel de base de datos.
• tables_priv: permisos a nivel de tabla.
• columns_priv: permisos a nivel de column
• routine_priv: permisos de stored procedure, triggers

Los valores en estas tablas son tipo "sí" (Y) y "no" (N). Un permiso Y, autoriza
a realizar la operación. Un permiso N, hará al sistema pasar a la siguiente tabla
(desde db hasta todas las tables_priv y columns_priv) hasta dar con permisos
positivos. Si ninguna tabla autoriza al usuario (todas con valor N), la operación
será denegada.
PERMISOS
Cada tabla de permisos tiene dos tipos de columnas:
• Columnas de alcance: Determinan el alcance de cada registro en las tablas, es decir, el
contexto en que el registro se aplica.
• Columnas de privilegios: Indican qué privilegios se otorgan a una cuenta sobre ciertas
bases de datos, tablas y/o columnas (y otros objetos del SGBD).
Al realizar una nueva conexión, el servidor realiza comprobaciones sobre las tablas de
permisos:
En la tabla user, las columnas de alcance determinan si se rechazan o se aceptan conexiones
entrantes. Las columnas de privilegios otorgados en ella son de carácter global (aplicados a
todas las BD alojadas en el servidor).
En la tabla db, las columnas de alcance determinan qué usuarios pueden acceder a qué bases
de datos desde qué equipo. Las columnas de privilegios determinan qué operaciones se
permiten a estos usuarios sobre estas BD y sus tablas.
La tabla host se usa junto a la tabla db para configurar registros que se apliquen a varios
equipos.
Lenguaje sql: usuarios y privilegios
Protocolo Transport Layer Security
Como seguridad extra, se pueden utilizar protocolos de cifrado de datos a la conexión entre
el cliente y el servidor de bases de datos. Destacamos como ejemplo principal el protocolo
Transport Layer Security (TLS), sucesor de Security Socket Layer (SSL). Este protocolo
incorpora cuatro elementos de seguridad en una conexión:
• Confidencialidad: Garantizar, mediante encriptación, que los datos sean enviados a los
destinatarios válidos y que no se pueda acceder a ellos sin autorización.
• Integridad: Evitar, mediante firma digital, que los datos puedan ser modificados sin
notificar al usuario. Este elemento está muy relacionado con la autenticación del usuario.
• Autenticación: Verificar la autoría del mensaje o modificación por parte del usuario.
• No repudio: Evitar que el emisor del mensaje o modificación niegue su autoría tras ser
autentificado.
Para utilizar conexiones SSL entre el servidor y los programas cliente es necesario disponer
de claves privadas y públicas y certificados. Para ello se puede utilizar el programa
OpenSSL (en Linux o Windows)..
mysql> SHOW VARIABLES LIKE 'have_openssl';
GESTION DE CONTRASEÑAS
MySQL admite estas capacidades de administración de contraseñas:
Caducidad de la contraseña, para exigir que las contraseñas se cambien
periódicamente.
Restricciones de reutilización de contraseñas, para evitar que se vuelvan a
elegir contraseñas antiguas.
Verificación de contraseña, para solicitar que los cambios de contraseña
también especifiquen la contraseña actual para ser reemplazada.
Contraseñas duales, para permitir que los clientes se conecten usando una
contraseña principal o secundaria.
Evaluación de la seguridad de la contraseña, para exigir contraseñas seguras.
Generación aleatoria de contraseñas, como alternativa a la necesidad de
contraseñas literales explícitas especificadas por el administrador.
Seguimiento de fallas de contraseña, para habilitar el bloqueo temporal de la
cuenta después de demasiadas fallas consecutivas de inicio de sesión con
Politicas de caducidad de contraseña
También podemos 'obligar' al usuario a que
cambie de password cada cierto número de días:
Por ejemplo cada 60 días.
CREATE USER ‘admin'@'localhost'
IDENTIFIED BY '12345678’
PASSWORD EXPIRE INTERVAL 1 DAY;
NEVER: que el password nunca 'caduca'.
Podemos 'obligar' a que un usuario cambie su DEFAULT: El password caducaría en el número
de días indicado por la variable del sistema
contraseña cuando se conecta por primera vez:
CREATE USER ‘user’ IDENTIFIED BY ‘clave’ default_password_lifetime que es de 360 días
'PASSWORD EXPIRE; SET PERSIST default_password_lifetime = 180;
ALTER USER ‘admin’@’localhost’
IDENTIFIED BY ‘1234’ PASSWORD EXPIRE;
SET PERSIST default_password_lifetime = 0;
•Requerir que la contraseña se cambie cada 90 días:
•CREATE USER ‘usr1'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
•ALTER USER ‘usr1'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
•Estaopción de vencimiento anula la política global para todas las cuentas nombradas por el estado de
cuenta.
•Deshabilitar la caducidad de la contraseña:
•CREATE USER ‘usr1'@'localhost' PASSWORD EXPIRE NEVER;
•ALTER USER ‘usr1'@'localhost' PASSWORD EXPIRE NEVER;
•Estaopción de vencimiento anula la política global para todas las cuentas nombradas por el estado de
cuenta.
•Respete la política de caducidad global para todas las cuentas nombradas en el estado de cuenta:
•CREATE USER ‘usr1'@'localhost' PASSWORD EXPIRE DEFAULT;
•ALTER USER ‘usr1'@'localhost' PASSWORD EXPIRE DEFAULT;
Cuando un cliente se conecta con éxito, el servidor determina si la contraseña de la cuenta ha caducado:
Política de reutilización de
contraseñas
MySQL permite imponer restricciones a la reutilización de contraseñas anteriores. Las
restricciones de reutilización se pueden establecer en función de la cantidad de cambios de
contraseña, el tiempo transcurrido o ambos.
El historial de contraseñas de una cuenta consta de contraseñas que se le han asignado en el
pasado. MySQL puede restringir que se elijan nuevas contraseñas de este historial:
Si una cuenta está restringida en función del número de cambios de contraseña, no se puede elegir
una nueva contraseña de un número específico de las contraseñas más recientes. Por ejemplo, si el
número mínimo de cambios de contraseña se establece en 3, una nueva contraseña no puede ser
igual a ninguna de las 3 contraseñas más recientes.
Si una cuenta está restringida según el tiempo transcurrido, no se puede elegir una nueva
contraseña de las contraseñas en el historial que son más recientes que una cantidad específica de
días. Por ejemplo, si el intervalo de reutilización de la contraseña se establece en 60, una nueva
contraseña no debe estar entre las elegidas previamente en los últimos 60 días.
• Requerir un mínimo de 5 cambios de contraseña antes de permitir la Política de contraseña global
reutilización:
SET GLOBAL password_history=2;
CREATE USER 'usr1'@'localhost' PASSWORD HISTORY 5;
ALTER USER 'usr1'@'localhost' PASSWORD HISTORY 5;
SET global password_reuse_interval=10;
• Requerir un mínimo de 365 días transcurridos antes de permitir la set global password_history=default,
reutilización: password_reuse_interval=default;
CREATE USER 'usr1'@'localhost' PASSWORD REUSE INTERVAL 365 Revertir laanulación por usuario
DAY;
ALTER USER 'usr1'@'localhost' PASSWORD REUSE INTERVAL 365 DAY;ALTER USER 'usr1'@'localhost’
• Para combinar ambos tipos de restricciones de reutilización, use PASSWORD HISTORY DEFAULT
PASSWORD HISTORY, y
PASSWORD REUSE INTERVAL
• PASSWORD REUSE INTERVAL juntos:
CREATE USER 'usr1'@'localhost’ PASSWORD HISTORY 5 PASSWORD
DEFAULT;
REUSE INTERVAL 365 DAY;
ALTER USER 'usr1'@'localhost’ PASSWORD HISTORY 5 PASSWORD
REUSE INTERVAL 365 DAY;
SELECT * FROM mysql.password_history\G
Politica de verificacion de
contraseña requerida
Para establecer una política global de que los •No requiera que los cambios de
cambios de contraseña deben especificar la
contraseña actual contraseña especifiquen la contraseña
SET PERSIST password_require_current = ON; actual (la contraseña actual puede, pero
SET PERSIST password_require_current = OFF; no es necesario, proporcionarla):
• Requerir que los cambios de contraseña
especifiquen la contraseña actual:
CREATE USER 'jeffrey'@'localhost'
CREATE USER 'jeffrey'@'localhost' PASSWORD PASSWORD REQUIRE CURRENT
REQUIRE CURRENT; OPTIONAL;
ALTER USER 'jeffrey'@'localhost' PASSWORD
REQUIRE CURRENT;
ALTER USER 'jeffrey'@'localhost'
Esta opción de verificación anula la política global PASSWORD REQUIRE CURRENT
para todas las cuentas nombradas por el estado de OPTIONAL;
cuenta.
Respete la política global de verificación
de contraseña requerida para todas las
cuentas nombradas en el extracto:
La verificación de la contraseña actual entra en juego cuando un usuario cambia
una contraseña usando la declaración ALTER USER o SET PASSWORD. En las
declaraciones de cambio de contraseña, una cláusula REPLACE especifica la
contraseña actual que se reemplazará. Ejemplos:

• Cambiar la contraseña del usuario actual:


ALTER USER USER() IDENTIFIED BY 'auth_string' REPLACE
'current_auth_string’;

• Cambiar la contraseña de un usuario determinado:


ALTER USER ‘usr1'@'localhost’ IDENTIFIED BY 'auth_string’ REPLACE
'current_auth_string';
Generación aleatoria de contraseñas
De forma predeterminada, las contraseñas aleatorias generadas tienen una
longitud de 20 caracteres. Esta longitud está controlada por la
generated_random_password_length variable del sistema, que tiene un rango de
5 a 255.
CREATE USER
'u1'@'localhost' IDENTIFIED BY RANDOM PASSWORD, . . .
'u3'@'%.org' IDENTIFIED BY RANDOM PASSWORD;
ALTER USER
'u1'@'localhost' IDENTIFIED BY RANDOM PASSWORD,
'u2'@'%.example.com' IDENTIFIED BY RANDOM PASSWORD;
SET PASSWORD FOR 'u3'@'%.org' TO RANDOM;
Seguimiento de inicio de sesión fallido y
bloqueo temporal de cuenta
“ Error de inicio de sesión ” significa que el cliente no proporcionó una contraseña correcta
durante un intento de conexión. El número requerido de fallas de inicio de sesión y el tiempo
de bloqueo son configurables por cuenta, usando las opciones FAILED_LOGIN_ATTEMPTS
y PASSWORD_LOCK_TIME de las declaraciones CREATE USER o ALTER USER.
CREATE USER 'u1'@'localhost' IDENTIFIED BY 'password’ FAILED_LOGIN_ATTEMPTS
3 PASSWORD_LOCK_TIME 3;
ALTER USER 'u2'@'localhost’ FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME
UNBOUNDED;
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'new_password’
FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;
Cuando ocurren demasiadas fallas de inicio de sesión consecutivas, el cliente recibe un error
Bloqueo / Desbloqueo de cuentas

Cuando creamos (o modificamos) una cuenta, podemos indicar si dicha cuenta está
bloqueada. En caso de estarlo, no estaría permitida la conexión al servidor de
Mysql. Ejemplo: Bloquear o desbloquear una cuenta:
ALTER USER ‘usr1'@'localhost' ACCOUNT LOCK;
ALTER USER ‘usr1'@'localhost' ACCOUNT UNLOCK;
Para saber si una cuenta está bloqueada podemos hacer uso de la orden SQL:
SHOW CREATE USER ‘usr1’
Cada vez que un usuario intenta conectarse haciendo uso de una cuenta bloqueada,
la variable de estado locked_connects se incrementa. Si un usuario intenta
conectarse haciendo uso de una cuenta bloqueada, recibirá el siguiente aviso:
Y se escribirá una entrada en el fichero de log error.log.
Opciones de limitación
de recursos
A cuenta podemos establecer ciertos límites: al uso que un usuario pueda hacer de
los recursos del servidor Mysql. Un ejemplo:
Los recursos que podemos limitar ver gráfico: Indican cuantas consultas,
actualizaciones, conexiones por hora son permitidas y cuantas conexiones
simultáneas están permitidas para el usuario . Si no se indica o se pone el valor 0 no
existen limitaciones.
Si un usuario intenta hacer uso de un número de recursos superior a los indicados,
tendrá un mensaje de error. Ejemplo:
CREATE USER ‘angel'@'localhost' IDENTIFIED BY 'password' WITH
MAX_QUERIES_PER_HOUR 10 MAX_USER_CONNECTIONS 5;
Conexiones simultáneas
En lo referente al número de conexiones máximas de un usuario
(simultáneas) debemos de tener en cuenta que cuando nos conectamos al
MySqlWorkBench se crean dos conexiones por cada usuario. Para
comprobarlo podemos ejecutar la orden SQL:
SHOW PROCESSLIST. Esta orden devuelve las conexiones activas al
servidor mysql de todos los usuarios.
El usuario tiene que tener el permiso PROCESS otorgado para ver las
A través de herramientas
conexiones de todos los usuarios, sino sólo ve las suyas
clientes,
tipo mysql, mysqladmin,...se
crea una única conexión al
servidor y se mantiene hasta
que salgamos.
Opciones de
autentificación
Recordar que la contraseña se guarda 'encriptada' haciendo uso
del plugin indicado, en la columna authentication_string de la tabla mysql.user.

Podemos enviar o bien:


'auth_string': Que sería la contraseña en texto sin encriptar.
'hash_string': Que sería la contraseña en formato 'hash' después de aplicarle la
función de hash indicada por el plugin.

Un ejemplo:
CREATE USER 'angel'@'%' IDENTIFIED BY '12345678';
Modificando
usuarios
MODIFICAR/ RENOMBRA/
ELIMINAR: usuarios
La sintaxis es casi idéntica a CREATE USER, sino que modificamos los valores
para un usuario determinado. Lo único diferente es la opción IF EXISTS. Dicha
opción sirve para que el gestor mysql realice la orden SQL 'ALTER USER' sólo
en el caso de que el usuario exista. Si no existe no hace nada. Si no ponemos
esta opción a la hora de modificar un usuario, tendríamos un mensaje de error.
Un ejemplo:
ALTER USER IF EXISTS 'angel'@'%' IDENTIFIED BY 'nueva_password';
En el caso del password también disponemos de la orden SET PASSWORD. Un
ejemplo:
SET PASSWORD FOR 'angel'@'%' = ‘newPASSWORD’;
Modificar el nombre del usuario
RENAME USER 'angel'@’%' to ‘usuario’@’localhost’;
Borrando Usuarios
DROP USER IF EXISTS ‘usuario'@'%';
BIBLIOGRAFIA:
http://www.personal.fi.upm.es/~lmengual/GESTION_B
D/GBD_GESTION_USUARIOS.pdf
https://wiki.cifprodolfoucha.es/index.php?title=Mysql_
Creaci%C3%B3n_de_usuarios
https://runebook.dev/es/docs/mariadb/user-password-ex
piry/index
Politicas de password
https://blog.pleets.org/article/es/cambiar-el-policy-level-
en-mysql

También podría gustarte