CREATE USER
Sintaxis
CREATE [OR REPLACE] USER [IF NOT EXISTS] user_specification [,user_specification] ... [REQUIRE {NONE | tls_option [[AND] tls_option] ...}] [WITH resource_option [resource_option] ...] user_specification: username [authentication_option] authentication_option: IDENTIFIED BY 'authentication_string' | IDENTIFIED BY PASSWORD 'hash_string' | IDENTIFIED {VIA|WITH} authentication_plugin | IDENTIFIED {VIA|WITH} authentication_plugin BY 'authentication_string' | IDENTIFIED {VIA|WITH} authentication_plugin {USING|AS} 'hash_string' tls_option: SSL | X509 | CIPHER 'cipher' | ISSUER 'issuer' | SUBJECT 'subject' resource_option: MAX_QUERIES_PER_HOUR count | MAX_UPDATE_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count
Descripción
La instrucción CREATE USER
crea nuevas cuentas MariaDB. Para poder utilizarla, debes tener el privilegio global CREATE USER
o el privilegio INSERT
para la base de datos mysql. Para cada cuenta, CREATE USER
crea una nueva fila en la tabla mysql.user, que no tiene privilegios.
Ver Nombres de cuenta más abajo para detalles en cómo se especifican los nombres de las cuentas.
Si una de las cuentas de usuario especificadas ya existe, dará un ERROR 1396 (HY000)
. Si ocurre un error, CREATE USER
todavía creará las cuentas que no resulten en el mismo.
Se le puede proporcionar una contraseña a la cuenta con la cláusula opcional IDENTIFIED BY
. Para especificar la contraseña en texto simple, se omite la palabra clave PASSWORD
.
Para especificar la contraseña como el valor hash retornado por la función PASSWORD
, se incluye la palabra clave PASSWORD
.
Si no especificas una contraseña con la cláusula IDENTIFIED BY
, el usuario será capaz de conectarse sin ella. Una contraseña en blanco no es un carácter comodín que pueda corresponder a cualquier contraseña. El usuario debe conectarse sin proporcionar ninguna contraseña, si la misma no está definida.
Nombres de cuenta
Los nombres de cuenta tienen tanto un nombre de usuario como un nombre de host, especificados como 'user_name'@'host_name'
.
Cuando te conectas a un servidor MariaDB, tu nombre de ususario y host debe corresponder a una sola cuenta.
El nombre de usuario y el nombre de host pueden ir sin comillas, entrecomillados utilizando ("
) o ('
), o (`
). Debes usar comillas cuando utilices caracteres especiales (como guiones) o caracteres comodín. Si usas comillas, debes entrecomillar el nombre de usuario y el nombre de host de forma separada (por ejemplo 'user_name'@'host_name'
).
Nombres de host
Si no se proporciona nombre de host, se asume que es '%'
.
Los nombres de host pueden tener los caracteres comodín %
y _
. Se comparan con la cláusula LIKE
. Si necesitas utilizar uno de estos caracteres de forma literal (por ejemplo, para hacer que un nombre de dominio coincida con un guión bajo), debes usar una barra inversa como prefijo (\). Ver LIKE
para más información sobre escape de caracteres comodín.
Las correspondencias de nombres de host no distinguen entre mayúsculas y minúsculas. Los nombres de host pueden corrensponder tanto a nombres de dominio como a direcciones IP. Usa 'localhost'
como el nombre de host para permitir únicamente conexiones del cliente local.
Puedes utilizar una máscara de red para cubrir un intervalo de direcciones IP usando 'base_ip/netmask'
como nombre de host. Un usuario con una dirección IP ip_addr tendrá permiso para conectarse si la siguiente condición resulta verdadera:
ip_addr & netmask = base_ip
Sólo puedes usar máscaras de red que especifiquen un múltiplo de 8 bits de la dirección correspondiente. Esto es, sólo las siguientes máscaras de red están permitidas:
255.0.0.0 255.255.0.0 255.255.255.0 255.255.255.255
Ten en cuenta que usar 255.255.255.255
es equivalente a no usar ninguna máscara de red.
Nombres de usuario
Los nombres de usuario deben coincidir exactamente, incluyendo mayúsculas y minúsculas. Puedes utilizar una cadena de texto vacía para permitir un usuario con cualquier nombre.
Es posible que coincida más de una cuenta cuando se conecta un/a usuari@. MariaDB selecciona la primera coincidencia, después de clasificar siguiendo los siguiente criterios:
- Cuentas con un nombre de host exacto son ordenados antes que las cuentas que contengan un carácter comodín en el nombre de host. Los nombres de host que usen una máscara de red son considerados exactos a efectos de la clasificación.
- Cuentas con un carácter comodín en el nombre de host son ordenadas de acuerdo con la posición del primero de estos caracteres. Aquéllos cuyo carácter comodín sea posterior irán antes que los que tengan dicho tipo de carácter en una posición más temprana en el nombre de host.
- Cuentas con un nombre de usuario no vacío se ordenan antes que las que tengan un nombre de usuario vacío.
La siguiente tabla muestra un ejemplo de lista de cuentas ordenadas por estos criterios:
+---------+-------------+ | User | Host | +---------+-------------+ | jeffrey | 192.168.0.3 | | | 192.168.0.% | | jeffrey | 192.168.% | | | 192.168.% | +---------+-------------+
Una vez conectad@, sólo tienes los privilegios concedidos a la cuenta correspondiente, y no a todas las cuentas que podrían corresponder. Por ejemplo, considera los siguientes comandos:
CREATE USER 'jeffrey'@'192.168.0.3'; CREATE USER 'jeffrey'@'%'; GRANT SELECT ON test.t1 to 'jeffrey'@'192.168.0.3'; GRANT SELECT ON test.t2 to 'jeffrey'@'%';
Si te conectas como jeffrey desde 192.168.0.3
, tendrás el privilegio SELECT
en la tabla test.t1
, pero no en la tabla test.t2
. Si te conectas como jeffrey desde cualquier otra dirección IP, tendrás el privilegio SELECT
en la tabla test.t2
, pero no en la tabla test.t1
.
MariaDB starting with 5.5.31
Desde MariaDB 5.5.31, los nombres de usuario pueden tener hasta 80 caracteres. Aún así, para habilitar esta característica, se deben realizar los siguientes cambios:
alter table mysql.user modify User char(80) binary not null default ''; alter table mysql.db modify User char(80) binary not null default ''; alter table mysql.tables_priv modify User char(80) binary not null default ''; alter table mysql.columns_priv modify User char(80) binary not null default ''; alter table mysql.procs_priv modify User char(80) binary not null default ''; alter table mysql.proc modify definer char(141) collate utf8_bin not null default ''; alter table mysql.event modify definer char(141) collate utf8_bin not null default ''; alter table mysql.proxies_priv modify User char(80) COLLATE utf8_bin not null default ''; alter table mysql.proxies_priv modify Proxied_user char(80) COLLATE utf8_bin not null default ''; alter table mysql.proxies_priv modify Grantor char(141) COLLATE utf8_bin not null default ''; alter table mysql.servers modify Username char(80) not null default ''; alter table mysql.procs_priv modify Grantor char(141) COLLATE utf8_bin not null default ''; alter table mysql.tables_priv modify Grantor char(141) COLLATE utf8_bin not null default ''; flush privileges;