Sintaxis
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user_specification [ user_options ...] user_specification: username [authentication_option] authentication_option: IDENTIFIED BY 'password' | IDENTIFIED BY PASSWORD 'password_hash' | IDENTIFIED {VIA|WITH} authentication_rule [OR authentication_rule ...] authentication_rule: authentication_plugin | authentication_plugin {USING|AS} 'authentication_string' | authentication_plugin {USING|AS} PASSWORD('password') GRANT PROXY ON username TO username [, username] ... [WITH GRANT OPTION] user_options: [REQUIRE {NONE | tls_option [[AND] tls_option] ...}] [WITH with_option [with_option] ...] object_type: TABLE | FUNCTION | PROCEDURE priv_level: * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name with_option: GRANT OPTION | resource_option resource_option: MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count | MAX_STATEMENT_TIME time tls_option: SSL | X509 | CIPHER 'cipher' | ISSUER 'issuer' | SUBJECT 'subject'
Descripción
los GRANT
La declaración le permite otorgar privilegios o roles a las cuentas. Usar GRANT
, debes tener el GRANT OPTION
privilegio, y debe tener los privilegios que está otorgando.
Utilizar el REVOKE
declaración para revocar los privilegios otorgados con el GRANT
declaración.
Utilizar el SHOW GRANTS
declaración para determinar qué privilegios tiene una cuenta.
Nombres de cuenta
Para GRANT
extractos, los nombres de las cuentas se especifican como username
argumento de la misma manera que lo son para CREATE USER
declaraciones. Ver nombres de cuentas del CREATE USER
página para obtener detalles sobre cómo se especifican los nombres de cuenta.
Creación de cuenta implícita
los GRANT
La declaración también le permite crear cuentas implícitamente en algunos casos.
Si la cuenta aún no existe, entonces GRANT
implícitamente puede crearlo. Para crear implícitamente una cuenta con GRANT
, se requiere que un usuario tenga los mismos privilegios que se requerirían para crear explícitamente la cuenta con el CREATE USER
declaración.
Si el NO_AUTO_CREATE_USER
SQL_MODE
está configurada, las cuentas solo se pueden crear si se especifica la información de autenticación, o con un CREATE USER
declaración. Si no se proporciona información de autenticación, GRANT
producirá un error cuando la cuenta especificada no existe, por ejemplo:
show variables like '%sql_mode%' ; +---------------+--------------------------------------------+ | Variable_name | Value | +---------------+--------------------------------------------+ | sql_mode | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+--------------------------------------------+ GRANT USAGE ON *.* TO 'user123'@'%' IDENTIFIED BY ''; ERROR 1133 (28000): Can't find any matching row in the user table GRANT USAGE ON *.* TO 'user123'@'%' IDENTIFIED VIA PAM using 'mariadb' require ssl ; Query OK, 0 rows affected (0.00 sec) select host, user from mysql.user where user="user123" ; +------+----------+ | host | user | +------+----------+ | % | user123 | +------+----------+
Niveles de privilegio
Los privilegios se pueden establecer globalmente, para una base de datos completa, para una tabla o rutina, o para columnas individuales en una tabla. Ciertos privilegios solo se pueden establecer en ciertos niveles.
-
Los privilegios globales se otorgan mediante
*.*
por priv_level. Los privilegios globales incluyen privilegios para administrar la base de datos y administrar cuentas de usuario, así como privilegios para todas las tablas, funciones y procedimientos. Los privilegios globales se almacenan en elmysql.user table
. -
Los privilegios de la base de datos se otorgan mediante
db_name.*
por priv_level, o usando solo*
para utilizar la base de datos predeterminada. Los privilegios de la base de datos incluyen privilegios para crear tablas y funciones, así como privilegios para todas las tablas, funciones y procedimientos de la base de datos. Los privilegios de la base de datos se almacenan en elmysql.db table
. -
Los privilegios de mesa se otorgan mediante
db_name.tbl_name
por priv_level, o usando solotbl_name
para especificar una tabla en la base de datos predeterminada. losTABLE
la palabra clave es opcional. Los privilegios de la tabla incluyen la capacidad de seleccionar y cambiar datos en la tabla. Se pueden otorgar ciertos privilegios de tabla para columnas individuales. -
Los privilegios de columna se otorgan especificando una tabla para priv_level y proporcionar una lista de columnas después del tipo de privilegio. Le permiten controlar exactamente qué columnas de una tabla pueden seleccionar y cambiar los usuarios.
-
Los privilegios de función se otorgan mediante
FUNCTION db_name.routine_name
por priv_level, o usando soloFUNCTION routine_name
para especificar una función en la base de datos predeterminada. -
Los privilegios de procedimiento se otorgan mediante
PROCEDURE db_name.routine_name
por priv_level, o usando soloPROCEDURE routine_name
para especificar un procedimiento en la base de datos predeterminada.
los USAGE
Privilegio
los USAGE
privilegio no otorga privilegios reales. los SHOW GRANTS
declaración mostrará un global USAGE
privilegio para un usuario recién creado. Puedes usar USAGE
con el GRANT
declaración para cambiar opciones como GRANT OPTION
y MAX_USER_CONNECTIONS
sin cambiar los privilegios de la cuenta.
los ALL PRIVILEGES
Privilegio
los ALL PRIVILEGES
privilege concede todos los privilegios disponibles. La concesión de todos los privilegios solo afecta al nivel de privilegio dado. Por ejemplo, otorgar todos los privilegios en una tabla no otorga ningún privilegio en la base de datos o globalmente.
Utilizando ALL PRIVILEGES
no otorga el especial GRANT OPTION
privilegio.
Puedes usar ALL
en lugar de ALL PRIVILEGES
.
los GRANT OPTION
Privilegio
Utilizar el WITH GRANT OPTION
cláusula para dar a los usuarios la capacidad de otorgar privilegios a otros usuarios en el nivel de privilegio dado. Usuarios con GRANT OPTION
privilege solo puede otorgar los privilegios que tienen. No pueden otorgar privilegios a un nivel de privilegio superior al que tienen GRANT OPTION
privilegio.
los GRANT OPTION
el privilegio no se puede establecer para columnas individuales. Si utiliza WITH GRANT OPTION
al especificar privilegios de columna, el GRANT OPTION
Se otorgará privilegio para toda la mesa.
Utilizando el WITH GRANT OPTION
la cláusula es equivalente a listar GRANT OPTION
como un privilegio.
Privilegios globales
La siguiente tabla enumera los privilegios que se pueden otorgar globalmente. También puede otorgar todos los privilegios de base de datos, tablas y funciones de forma global. Cuando se otorgan globalmente, estos privilegios se aplican a todas las bases de datos, tablas o funciones, incluidas las creadas posteriormente.
Para establecer un privilegio global, use *.*
por priv_level.
Privilegio | Descripción |
---|---|
CREATE USER |
Cree un usuario usando el CREATE USER declaración, o crear implícitamente un usuario con la GRANT declaración. |
FILE |
Leer y escribir archivos en el servidor, usando declaraciones como LOAD DATA INFILE o funciones como LOAD_FILE() . También es necesario para crear CONNECT tablas exteriores. El servidor MariaDB debe tener los permisos para acceder a esos archivos. |
GRANT OPTION |
Otorga privilegios globales. Solo puede otorgar privilegios que tenga. |
PROCESS |
Mostrar información sobre los procesos activos, a través de SHOW PROCESSLIST o mysqladmin processlist . |
RELOAD |
Ejecutar FLUSH declaraciones o equivalente mysqladmin commands.
|
REPLICATION CLIENT |
Ejecutar SHOW MASTER STATUS y SHOW SLAVE STATUS declaraciones informativas. |
REPLICATION SLAVE |
Las cuentas utilizadas por los servidores esclavos en el maestro necesitan este privilegio. Esto es necesario para obtener las actualizaciones realizadas en el maestro. |
SHOW DATABASES |
Enumere todas las bases de datos utilizando el SHOW DATABASES declaración. Sin el SHOW DATABASES privilegio, aún puede emitir el SHOW DATABASES declaración, pero solo enumerará las bases de datos que contienen tablas en las que tiene privilegios. |
SHUTDOWN |
Apague el servidor usando SHUTDOWN o la mysqladmin shutdown mando. |
SUPER |
Ejecute declaraciones de superusuario: CHANGE MASTER TO , KILL (los usuarios que no tienen este privilegio solo pueden KILL sus propios hilos), PURGE LOGS , SET global system variables , o la mysqladmin debug mando. Además, este permiso permite al usuario escribir datos incluso si el read_only La opción de inicio está configurada, habilita o deshabilita el registro, habilita o deshabilita la replicación en esclavos, especifica un DEFINER para declaraciones que apoyan esa cláusula, conéctese una vez después de alcanzar el MAX_CONNECTIONS . Si se ha especificado una sentencia para el init-connect mysqld opción, ese comando no se ejecutará cuando un usuario con SUPER privilegios se conecta al servidor. |
Privilegios de base de datos
La siguiente tabla enumera los privilegios que se pueden otorgar a nivel de base de datos. También puede otorgar todos los privilegios de tabla y función en el nivel de la base de datos. Los privilegios de tabla y función en una base de datos se aplican a todas las tablas o funciones de esa base de datos, incluidas las creadas posteriormente.
Para establecer un privilegio para una base de datos, especifique la base de datos usando db_name.*
por priv_level, o simplemente usa *
para especificar la base de datos predeterminada.
Privilegio | Descripción |
---|---|
CREATE |
Cree una base de datos usando el CREATE DATABASE declaración, cuando se concede el privilegio para una base de datos. Puedes conceder el CREATE privilegio sobre bases de datos que aún no existen. Esto también otorga la CREATE privilegio en todas las tablas de la base de datos. |
CREATE ROUTINE |
Cree programas almacenados utilizando el CREATE PROCEDURE y CREATE FUNCTION declaraciones. |
CREATE TEMPORARY TABLES |
Crea tablas temporales con el CREATE TEMPORARY TABLE declaración. Este privilegio permite escribir y eliminar esas tablas temporales |
DROP |
Suelta una base de datos usando el DROP DATABASE declaración, cuando se concede el privilegio para una base de datos. Esto también otorga la DROP privilegio en todas las tablas de la base de datos. |
EVENT |
Crear, soltar y alterar EVENT s. Agregado en MySQL 5.1.6. |
GRANT OPTION |
Otorgue privilegios de base de datos. Solo puede otorgar privilegios que tenga. |
LOCK TABLES |
Adquirir bloqueos explícitos utilizando el LOCK TABLES declaración; también necesitas tener el SELECT privilegio sobre una mesa, con el fin de bloquearlo. |
Privilegios de mesa
Privilegio | Descripción |
---|---|
ALTER |
Cambiar la estructura de una tabla existente usando el ALTER TABLE declaración. |
CREATE |
Crea una tabla usando el CREATE TABLE declaración. Puedes conceder el CREATE privilegio en tablas que aún no existen. |
CREATE VIEW |
Cree una vista usando el CREATE_VIEW declaración. |
DELETE |
Quite filas de una tabla usando el DELETE declaración. |
DELETE HISTORY |
Quite filas históricas de una tabla usando el DELETE HISTORY declaración. Se muestra como DELETE VERSIONING ROWS al ejecutar MOSTRAR SUBVENCIONES hasta MariaDB 10.3.15 y hasta MariaDB 10.4.5 (MDEV-17655), o al ejecutar MOSTRAR PRIVILEGIOS (MDEV-20382). De MariaDB 10.3.4. De MariaDB 10.3.5, si un usuario tiene la SUPER privilegio pero no este privilegio, ejecutar mysql_upgrade otorgará este privilegio también. |
DROP |
Suelta una mesa usando el DROP TABLE declaración o una vista usando el DROP VIEW declaración. También se requiere para ejecutar el TRUNCATE TABLE declaración. |
GRANT OPTION |
Otorga privilegios de mesa. Solo puede otorgar privilegios que tenga. |
INDEX |
Cree un índice en una tabla usando el CREATE INDEX declaración. Sin el INDEX privilegio, aún puede crear índices al crear una tabla utilizando el CREATE TABLE declaración si tienes el CREATE privilegio, y puede crear índices utilizando el ALTER TABLE declaración si tiene el ALTER privilegio. |
INSERT |
Agregue filas a una tabla usando el INSERT declaración. los INSERT el privilegio también se puede establecer en columnas individuales; consulte Privilegios de columna a continuación para obtener más detalles. |
REFERENCES |
No usado. |
SELECT |
Leer datos de una tabla usando el SELECT declaración. los SELECT el privilegio también se puede establecer en columnas individuales; consulte Privilegios de columna a continuación para obtener más detalles. |
SHOW VIEW |
Mostrar la CREATE VIEW declaración para crear una vista usando el SHOW CREATE VIEW declaración. |
TRIGGER |
Ejecute los disparadores asociados a las tablas que actualice, ejecute el CREATE TRIGGER y DROP TRIGGER declaraciones. Aún podrá ver los desencadenantes. |
UPDATE |
Actualice las filas existentes en una tabla usando el UPDATE declaración. UPDATE las declaraciones suelen incluir un WHERE cláusula para actualizar solo ciertas filas. Debes tener SELECT privilegios en la tabla o las columnas apropiadas para el WHERE cláusula. los UPDATE el privilegio también se puede establecer en columnas individuales; consulte Privilegios de columna a continuación para obtener más detalles. |
Privilegios de columna
Se pueden establecer algunos privilegios de tabla para columnas individuales de una tabla. Para usar privilegios de columna, especifique la tabla explícitamente y proporcione una lista de nombres de columna después del tipo de privilegio. Por ejemplo, la siguiente declaración permitiría al usuario leer los nombres y puestos de los empleados, pero no otra información de la misma tabla, como los salarios.
GRANT SELECT (name, position) on Employee to 'jeffrey'@'localhost';
Privilegio | Descripción |
---|---|
INSERT (column_list) |
Agregue filas especificando valores en columnas usando el INSERT declaración. Si solo tiene nivel de columna INSERT privilegios, debe especificar las columnas que están estableciendo en el INSERT declaración. Todas las demás columnas se establecerán en sus valores predeterminados, o NULL . |
REFERENCES (column_list) |
No usado. |
SELECT (column_list) |
Leer valores en columnas usando el SELECT declaración. No puede acceder ni consultar ninguna columna para la que no tenga SELECT privilegios, incluso en WHERE , ON , GROUP BY , y ORDER BY cláusulas. |
UPDATE (column_list) |
Actualice los valores en columnas de filas existentes usando el UPDATE declaración. UPDATE las declaraciones suelen incluir un WHERE cláusula para actualizar solo ciertas filas. Debes tener SELECT privilegios en la tabla o las columnas apropiadas para el WHERE cláusula. |
Privilegios de función
Privilegio | Descripción |
---|---|
ALTER ROUTINE |
Cambie las características de una función almacenada utilizando el ALTER FUNCTION declaración. |
EXECUTE |
Utilice una función almacenada. Necesitas SELECT privilegios para cualquier tabla o columna a la que acceda la función. |
GRANT OPTION |
Otorgar privilegios de funciones. Solo puede otorgar privilegios que tenga. |
Privilegios de procedimiento
Privilegio | Descripción |
---|---|
ALTER ROUTINE |
Cambiar las características de un procedimiento almacenado mediante el ALTER PROCEDURE declaración. |
EXECUTE |
Ejecute un procedimiento almacenado usando el CALL declaración. El privilegio de llamar a un procedimiento puede permitirle realizar acciones que de otro modo no podría realizar, como insertar filas en una tabla. |
GRANT OPTION |
Otorgar privilegios de procedimiento. Solo puede otorgar privilegios que tenga. |
Privilegios de proxy
Privilegio | Descripción |
---|---|
PROXY |
Permite que un usuario sea proxy de otro. |
los PROXY
El privilegio permite que un usuario actúe como proxy como otro usuario, lo que significa que sus privilegios cambian a los del usuario proxy, y el CURRENT_USER()
La función devuelve el nombre de usuario del usuario proxy.
los PROXY
privilege solo funciona con complementos de autenticación que lo admitan. El valor por defecto mysql_native_password
El complemento de autenticación no admite usuarios proxy.
los pam
El complemento de autenticación es el único incluido con MariaDB que actualmente admite usuarios proxy. los PROXY
privilegio se usa comúnmente con el pam
complemento de autenticación para habilitar el mapeo de usuarios y grupos con PAM.
Por ejemplo, para otorgar la PROXY
privilegio a una cuenta anónima que se autentica con el pam
complemento de autenticación, puede ejecutar lo siguiente:
CREATE USER 'dba'@'%' IDENTIFIED BY 'strongpassword'; GRANT ALL PRIVILEGES ON *.* TO 'dba'@'%' ; CREATE USER ''@'%' IDENTIFIED VIA pam USING 'mariadb'; GRANT PROXY ON 'dba'@'%' TO ''@'%';
Una cuenta de usuario solo puede otorgar PROXY
privilegio para una cuenta de usuario específica si el otorgante también tiene el PROXY
privilegio para esa cuenta de usuario específica, y si ese privilegio está definido WITH GRANT OPTION
. Por ejemplo, el siguiente ejemplo falla porque el otorgante no tiene el PROXY
privilegio para esa cuenta de usuario específica en absoluto:
SELECT USER(), CURRENT_USER(); +-----------------+-----------------+ | USER() | CURRENT_USER() | +-----------------+-----------------+ | alice@localhost | alice@localhost | +-----------------+-----------------+ SHOW GRANTS; +-----------------------------------------------------------------------------------------------------------------------+ | Grants for alice@localhost | +-----------------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'alice'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' | +-----------------------------------------------------------------------------------------------------------------------+ GRANT PROXY ON 'dba'@'localhost' TO 'bob'@'localhost'; ERROR 1698 (28000): Access denied for user 'alice'@'localhost'
Y el siguiente ejemplo falla porque el otorgante tiene el PROXY
privilegio para esa cuenta de usuario específica, pero no está definido WITH GRANT OPTION
:
SELECT USER(), CURRENT_USER(); +-----------------+-----------------+ | USER() | CURRENT_USER() | +-----------------+-----------------+ | alice@localhost | alice@localhost | +-----------------+-----------------+ SHOW GRANTS; +-----------------------------------------------------------------------------------------------------------------------+ | Grants for alice@localhost | +-----------------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'alice'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' | | GRANT PROXY ON 'dba'@'localhost' TO 'alice'@'localhost' | +-----------------------------------------------------------------------------------------------------------------------+ MariaDB [(none)]> GRANT PROXY ON 'dba'@'localhost' TO 'bob'@'localhost'; ERROR 1698 (28000): Access denied for user 'alice'@'localhost'
Pero el siguiente ejemplo tiene éxito porque el otorgante tiene la PROXY
privilegio para esa cuenta de usuario específica, y se define WITH GRANT OPTION
:
SELECT USER(), CURRENT_USER(); +-----------------+-----------------+ | USER() | CURRENT_USER() | +-----------------+-----------------+ | alice@localhost | alice@localhost | +-----------------+-----------------+ SHOW GRANTS; +-----------------------------------------------------------------------------------------------------------------------------------------+ | Grants for alice@localhost | +-----------------------------------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'alice'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' WITH GRANT OPTION | | GRANT PROXY ON 'dba'@'localhost' TO 'alice'@'localhost' WITH GRANT OPTION | +-----------------------------------------------------------------------------------------------------------------------------------------+ GRANT PROXY ON 'dba'@'localhost' TO 'bob'@'localhost'; Query OK, 0 rows affected (0.004 sec)
Una cuenta de usuario puede otorgar PROXY
privilegio para cualquier otra cuenta de usuario si el otorgante tiene el PROXY
privilegio para el ''@'%'
cuenta de usuario anónimo, así:
GRANT PROXY ON ''@'%' TO 'dba'@'localhost' WITH GRANT OPTION;
Por ejemplo, el siguiente ejemplo tiene éxito porque el usuario puede otorgar la PROXY
privilegio para cualquier otra cuenta de usuario:
SELECT USER(), CURRENT_USER(); +-----------------+-----------------+ | USER() | CURRENT_USER() | +-----------------+-----------------+ | alice@localhost | alice@localhost | +-----------------+-----------------+ SHOW GRANTS; +-----------------------------------------------------------------------------------------------------------------------------------------+ | Grants for alice@localhost | +-----------------------------------------------------------------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'alice'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' WITH GRANT OPTION | | GRANT PROXY ON ''@'%' TO 'alice'@'localhost' WITH GRANT OPTION | +-----------------------------------------------------------------------------------------------------------------------------------------+ GRANT PROXY ON 'app1_dba'@'localhost' TO 'bob'@'localhost'; Query OK, 0 rows affected (0.004 sec) GRANT PROXY ON 'app2_dba'@'localhost' TO 'carol'@'localhost'; Query OK, 0 rows affected (0.004 sec)
El valor por defecto root
cuentas de usuario creadas por mysql_install_db
tener este privilegio. Por ejemplo:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION;
Esto permite que el valor predeterminado root
cuentas de usuario para otorgar el PROXY
privilegio para cualquier otra cuenta de usuario, y también permite el root
cuentas de usuario para otorgar a otros el privilegio de hacer lo mismo.
Opciones de autenticación
Las opciones de autenticación para el GRANT
declaración son los mismos que los de la CREATE USER
declaración.
IDENTIFICADO POR ‘contraseña’
El opcional IDENTIFIED BY
La cláusula se puede utilizar para proporcionar una cuenta con una contraseña. La contraseña debe especificarse en texto sin formato. Será hash por el PASSWORD
función antes de ser almacenado en el mysql.user
mesa.
Por ejemplo, si nuestra contraseña es mariadb
, luego podemos crear el usuario con:
GRANT USAGE ON *.* TO foo2@test IDENTIFIED BY 'mariadb';
Si no especifica una contraseña con el IDENTIFIED BY
cláusula, el usuario podrá conectarse sin contraseña. Una contraseña en blanco no es un comodín para coincidir con ninguna contraseña. El usuario debe conectarse sin proporcionar una contraseña si no se establece ninguna contraseña.
Si la cuenta de usuario ya existe y si proporciona la IDENTIFIED BY
cláusula, se cambiará la contraseña del usuario. Debe tener los privilegios necesarios para SET PASSWORD
declaración para cambiar la contraseña de un usuario con GRANT
.
Los únicos complementos de autenticación que admite esta cláusula son mysql_native_password
y mysql_old_password
.
IDENTIFICADO POR CONTRASEÑA ‘password_hash’
El opcional IDENTIFIED BY PASSWORD
La cláusula se puede utilizar para proporcionar una cuenta con una contraseña que ya ha sido codificada. La contraseña debe especificarse como un hash proporcionado por el PASSWORD
función. Se almacenará en el mysql.user
tabla como está.
Por ejemplo, si nuestra contraseña es mariadb
, luego podemos encontrar el hash con:
SELECT PASSWORD('mariadb'); +-------------------------------------------+ | PASSWORD('mariadb') | +-------------------------------------------+ | *54958E764CE10E50764C2EECBB71D01F08549980 | +-------------------------------------------+ 1 row in set (0.00 sec)
Y luego podemos crear un usuario con el hash:
GRANT USAGE ON *.* TO foo2@test IDENTIFIED BY PASSWORD '*54958E764CE10E50764C2EECBB71D01F08549980';
Si no especifica una contraseña con el IDENTIFIED BY
cláusula, el usuario podrá conectarse sin contraseña. Una contraseña en blanco no es un comodín para coincidir con ninguna contraseña. El usuario debe conectarse sin proporcionar una contraseña si no se establece ninguna contraseña.
Si la cuenta de usuario ya existe y si proporciona la IDENTIFIED BY
cláusula, se cambiará la contraseña del usuario. Debe tener los privilegios necesarios para SET PASSWORD
declaración para cambiar la contraseña de un usuario con GRANT
.
Los únicos complementos de autenticación que admite esta cláusula son mysql_native_password
y mysql_old_password
.
IDENTIFICADO {VIA | WITH} authentication_plugin
El opcional IDENTIFIED VIA authentication_plugin
le permite especificar que la cuenta debe ser autenticada por un complemento de autenticación específico. El nombre del complemento debe ser un complemento de autenticación activo según SHOW PLUGINS
. Si no aparece en esa salida, deberá instalarlo con INSTALL PLUGIN
o INSTALL SONAME
.
Por ejemplo, esto podría usarse con el complemento de autenticación PAM:
GRANT USAGE ON *.* TO foo2@test IDENTIFIED VIA pam;
Algunos complementos de autenticación permiten especificar argumentos adicionales después de una USING
o AS
palabra clave. Por ejemplo, el complemento de autenticación PAM acepta un nombre de servicio:
GRANT USAGE ON *.* TO foo2@test IDENTIFIED VIA pam USING 'mariadb';
El significado exacto del argumento adicional dependería del complemento de autenticación específico.
MariaDB comenzando con 10.4.0
los USING
o AS
La palabra clave también se puede utilizar para proporcionar una contraseña de texto sin formato a un complemento si se proporciona como un argumento para la función PASSWORD (). Esto solo es válido para complementos de autenticación que han implementado un enlace para la función PASSWORD (). Por ejemplo, el ed25519
El complemento de autenticación admite esto:
CREATE USER safe@'%' IDENTIFIED VIA ed25519 USING PASSWORD('secret');
MariaDB comenzando con 10.4.3
Se pueden especificar muchos complementos de autenticación, todos funcionan como formas alternativas de autenticar a un usuario:
CREATE USER safe@'%' IDENTIFIED VIA ed25519 USING PASSWORD('secret') OR unix_socket;
Opciones de límite de recursos
MariaDB comenzando con 10.2.0
MariaDB 10.2.0 introdujo una serie de opciones de límite de recursos.
Es posible establecer límites por cuenta para ciertos recursos del servidor. La siguiente tabla muestra los valores que se pueden establecer por cuenta:
Tipo de límite | Descripción |
---|---|
MAX_QUERIES_PER_HOUR |
Número de extractos que la cuenta puede emitir por hora (incluidas actualizaciones) |
MAX_UPDATES_PER_HOUR |
Número de actualizaciones (no consultas) que la cuenta puede emitir por hora |
MAX_CONNECTIONS_PER_HOUR |
Número de conexiones que la cuenta puede iniciar por hora |
MAX_USER_CONNECTIONS |
Número de conexiones simultáneas que se pueden aceptar desde la misma cuenta; si es 0, max_connections se utilizará en su lugar; si max_connections es 0, no hay límite para las conexiones simultáneas de esta cuenta. |
MAX_STATEMENT_TIME |
Tiempo de espera, en segundos, para declaraciones ejecutadas por el usuario. Consulte también Cancelación de declaraciones que superan un cierto tiempo para ejecutarse. |
Si alguno de estos límites se establece en 0
, entonces no hay límite para ese recurso para ese usuario.
Para establecer límites de recursos para una cuenta, si no desea cambiar los privilegios de esa cuenta, puede emitir un GRANT
declaración con el USAGE
privilegio, que no tiene sentido. La declaración puede nombrar algunos o todos los tipos de límites, en cualquier orden.
A continuación, se muestra un ejemplo que muestra cómo establecer límites de recursos:
GRANT USAGE ON *.* TO 'someone'@'localhost' WITH MAX_USER_CONNECTIONS 0 MAX_QUERIES_PER_HOUR 200;
Los recursos se rastrean por cuenta, lo que significa 'user'@'server'
; no por nombre de usuario o por conexión.
El recuento se puede restablecer para todos los usuarios que utilizan FLUSH USER_RESOURCES
, FLUSH PRIVILEGES
o mysqladmin reload
.
Los límites de recursos por cuenta se almacenan en el user
mesa, en el mysql
base de datos. Las columnas utilizadas para los límites de recursos se nombran max_questions
, max_updates
, max_connections
(por MAX_CONNECTIONS_PER_HOUR
), y max_user_connections
(por MAX_USER_CONNECTIONS
).
Opciones de TLS
De forma predeterminada, MariaDB transmite datos entre el servidor y los clientes sin cifrarlos. Esto es generalmente aceptable cuando el servidor y el cliente se ejecutan en el mismo host o en redes donde la seguridad está garantizada por otros medios. Sin embargo, en los casos en que el servidor y el cliente existen en redes separadas o están en una red de alto riesgo, la falta de cifrado introduce problemas de seguridad, ya que un actor malintencionado podría espiar el tráfico a medida que se envía a través de la red entre ellos. .
Para mitigar esta preocupación, MariaDB le permite cifrar los datos en tránsito entre el servidor y los clientes mediante el protocolo Transport Layer Security (TLS). TLS se conocía anteriormente como Secure Socket Layer (SSL), pero estrictamente hablando, el protocolo SSL es un predecesor de TLS y esa versión del protocolo ahora se considera insegura. La documentación todavía usa el término SSL a menudo y, por razones de compatibilidad, el sistema de servidor relacionado con TLS y las variables de estado aún usan el prefijo ssl_, pero internamente, MariaDB solo admite sus sucesores seguros.
Consulte Descripción general de conexiones seguras para obtener más información sobre cómo determinar si su servidor MariaDB tiene soporte TLS.
Puede establecer ciertas restricciones relacionadas con TLS para cuentas de usuario específicas. Por ejemplo, puede usar esto con cuentas de usuario que requieren acceso a datos confidenciales mientras los envían a través de redes que no controla. Estas restricciones se pueden habilitar para una cuenta de usuario con el CREATE USER
, ALTER USER
, o GRANT
declaraciones. Las siguientes opciones están disponibles:
Opción | Descripción |
---|---|
REQUIRE NONE |
TLS no es necesario para esta cuenta, pero aún se puede usar. |
REQUIRE SSL |
La cuenta debe usar TLS, pero no se requiere un certificado X509 válido. Esta opción no se puede combinar con otras opciones de TLS. |
REQUIRE X509 |
La cuenta debe usar TLS y debe tener un certificado X509 válido. Esta opción implica REQUIRE SSL . Esta opción no se puede combinar con otras opciones de TLS. |
REQUIRE ISSUER 'issuer' |
La cuenta debe usar TLS y debe tener un certificado X509 válido. Además, la autoridad de certificación debe ser la especificada a través de la cadena issuer . Esta opción implica REQUIRE X509 . Esta opción se puede combinar con la SUBJECT , y CIPHER opciones en cualquier orden. |
REQUIRE SUBJECT 'subject' |
La cuenta debe usar TLS y debe tener un certificado X509 válido. Además, el Asunto del certificado debe ser el especificado a través de la cadena subject . Esta opción implica REQUIRE X509 . Esta opción se puede combinar con la ISSUER , y CIPHER opciones en cualquier orden. |
REQUIRE CIPHER 'cipher' |
La cuenta debe usar TLS, pero no se requiere un certificado X509 válido. Además, el cifrado utilizado para la conexión debe utilizar uno de los métodos especificados en la cadena cipher . Esta opción implica REQUIRE SSL . Esta opción se puede combinar con la ISSUER , y SUBJECT opciones en cualquier orden. |
los REQUIRE
La palabra clave debe usarse solo una vez para todas las opciones especificadas, y la palabra clave AND
La palabra clave se puede utilizar para separar opciones individuales, pero no es necesaria.
Por ejemplo, puede crear una cuenta de usuario que requiera estas opciones de TLS con lo siguiente:
GRANT USAGE ON *.* TO 'alice'@'%' REQUIRE SUBJECT '/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland' AND ISSUER '/C=FI/ST=Somewhere/L=City/ O=Some Company/CN=Peter Parker/[email protected]' AND CIPHER 'TLSv1.2';
Si alguna de estas opciones está configurada para una cuenta de usuario específica, entonces cualquier cliente que intente conectarse con esa cuenta de usuario deberá estar configurado para conectarse con TLS.
Consulte Protección de las conexiones para el cliente y el servidor para obtener información sobre cómo habilitar TLS en el cliente y el servidor.
Roles
MariaDB comenzando con 10.0.5
Los roles se introdujeron en MariaDB 10.0.5.
Sintaxis
GRANT role TO grantee [, grantee2 ... ] [ WITH ADMIN OPTION ]
La declaración GRANT también se utiliza para otorgar al uso un rol a uno o más usuarios u otros roles. Para poder otorgar un rol, el otorgante que lo haga debe tener permiso para hacerlo (ver CON ADMINISTRADOR en el artículo CREAR PAPEL).
Especificando el WITH ADMIN OPTION
permite que el beneficiario, a su vez, otorgue el rol a otro.
Por ejemplo, los siguientes comandos muestran cómo otorgar el mismo rol a un par de usuarios diferentes.
GRANT journalist TO hulda; GRANT journalist TO berengar WITH ADMIN OPTION;
Si a un usuario se le ha otorgado un rol, no obtiene automáticamente todos los permisos asociados con ese rol. Estos permisos solo se utilizan cuando el usuario activa el rol con la instrucción SET ROLE.
Ejemplos de subvenciones
Otorgar privilegios similares a los de la raíz
Puede crear un usuario que tenga privilegios similares a los predeterminados root
cuentas ejecutando lo siguiente:
CREATE USER 'alexander'@'localhost'; GRANT ALL PRIVILEGES ON *.* to 'alexander'@'localhost' WITH GRANT OPTION;
Ver también
-
–skip-grant-tables le permite iniciar MariaDB sin
GRANT
. Esto es útil si perdió su contraseña de root. -
CREAR USUARIO
-
ALTER USUARIO
-
SOLICITAR USUARIO
-
CONFIGURAR LA CLAVE
-
MOSTRAR CREAR USUARIO
-
tabla mysql.user
-
Complementos de validación de contraseñas: permite establecer criterios básicos para las contraseñas.
-
Complementos de autenticación: permiten utilizar varios métodos de autenticación y desarrollar otros nuevos.
El contenido reproducido en este sitio es propiedad de sus respectivos dueños, y MariaDB no revisa este contenido con anticipación. Los puntos de vista, la información y las opiniones expresadas por este contenido no representan necesariamente las de MariaDB o de cualquier otra parte.