Acerca de los usuarios de MySQL

En esta página, se describe cómo funciona Cloud SQL con usuarios de MySQL. Las cuentas de usuario de MySQL proporcionan seguridad mediante el control del acceso a las bases de datos de MySQL.

Para obtener la documentación completa sobre los usuarios de MySQL, consulta Control de acceso y administración de cuentas en la documentación de MySQL. Para obtener más información sobre cómo crear y administrar usuarios de Cloud SQL, consulta Crea y administra usuarios.

Razones por las que necesitas cuentas de usuario de MySQL

Las cuentas de usuario de MySQL te permiten acceder a tu instancia de Cloud SQL y administrarla. También se necesitan cuentas de usuario para que las aplicaciones accedan a tu instancia.

Restricciones de superusuario

En Cloud SQL, los clientes no pueden crear usuarios con atributos de superusuario ni acceder a ellos.

Debido a que Cloud SQL para MySQL es un servicio administrado, restringe el acceso a ciertas tablas y procedimientos del sistema.

Los privilegios del lenguaje de manipulación de datos (DML) y el lenguaje de definición de datos (DDL) se restringen en algunas tablas de esquema.

A continuación, se muestra la lista de las tablas del sistema de MySQL 5.6 en el esquema mysql que requieren permisos de escritura: audit_log_rules_expanded, audit_log_supported_ops, audit_log_rules y cloudsql_replica_index, db, event, func, heartbeat, plugin, proc, user y tables_priv.

Para MySQL 5.7, esta es la lista: audit_log_rules_expanded, audit_log_supported_ops, audit_log_rules, cloudsql_replica_index, db, event, func, gtid_executed, heartbeat, plugin, proc, user y tables_priv.

Para obtener información relacionada sobre MySQL 8.0 y MySQL 8.4, consulta Privilegios de usuario de MySQL 8.0 (cloudsqlsuperuser) y Privilegios de usuario de MySQL 8.4 (cloudsqlsuperuser).

Formato de las cuentas de usuario de MySQL

Las cuentas de usuario de MySQL tienen dos componentes: un nombre de usuario y un nombre de host. El nombre de usuario identifica al usuario y el nombre de host especifica desde qué hosts se puede conectar un usuario. El nombre de usuario y el nombre de host se combinan para crear una cuenta de usuario:

'<user_name>'@'<host_name>'

Puedes especificar una dirección IP o un rango de direcciones para el nombre de host, o usar el símbolo de porcentaje (“%”) a fin de no restringir el nombre de host. Ten en cuenta que si conectas tu instancia mediante direcciones IP, debes agregar tu dirección IP de cliente como una dirección autorizada, incluso si el nombre de host no está restringido.

Las cuentas de usuario están definidas por ambos, el nombre de usuario y el nombre de host. Por ejemplo, 'user'@'%' es una cuenta de usuario diferente que 'user'@'localhost'.

Usuario predeterminado de MySQL

Cuando se crean, las instancias de MySQL tienen una cuenta de usuario predeterminada: 'root'@'%'. Usa esta cuenta para conectarte y administrar la instancia de base de datos por primera vez. El usuario predeterminado tiene todos los privilegios de la base de datos, excepto SUPER y FILE. En Cloud SQL, no puedes cambiar el nombre de 'root'@'%'.

El valor predeterminado para root'@'% no es una contraseña, y MySQL no requiere que uses una contraseña para root'@'%. Sin embargo, debido a que root'@'% existe en la mayoría de las instalaciones de MySQL, el usuario root'@'% es un objetivo común de los accesos no autorizados. Cualquier persona o programa que obtenga acceso a la instancia, podrá acceder a ella y a los datos y controlarlos de forma casi ilimitada. Por este motivo, te recomendamos que configures tu usuario de root'@'% con una contraseña segura o lo borres. Para obtener ayuda con la configuración de tu cuenta de usuario predeterminada, consulta Configura la cuenta de usuario predeterminada.

Usuarios de sistemas

Existen siete usuarios del sistema:

  • root@localhost, root@127.0.0.1, root@::1

    Se usa para proporcionar el servicio de base de datos administrada.

  • cloudsqlreplica@%

    Se usa como usuario de replicación para réplicas.

  • cloudsqlimport@localhost, cloudsqlimport@127.0.0.1

    Se usa para importar datos.

  • cloudsqlexport@localhost, cloudsqlexport@127.0.0.1

    Se usa para exportar datos.

  • cloudsqloneshot

    Se usa para otras operaciones de base de datos.

  • cloudsqlapplier@localhost

    Se usa para operaciones de replicación en la réplica del servidor externo o en la replicación entre versiones principales.

  • cloudsqlobservabilityadmin

    Se usa para la observabilidad de la base de datos.

  • cloudiamgroup@'%'

    Se usa para la autenticación de grupos de IAM.

No puedes borrarlos o modificarlos.

Otras cuentas de usuario de MySQL

También puedes crear otras cuentas de usuario de MySQL. Esto es una buena idea porque te permite usar diferentes cuentas de usuario de MySQL para diferentes propósitos.

Puedes crear una cuenta de usuario con un nombre de host restringido o usar comandos de SQL para limitar los privilegios en las cuentas de usuario.

Para obtener más información sobre los nombres de las cuentas de usuario, consulta Especifica los nombres de las cuentas en la documentación de MySQL. Para crear un nuevo usuario de MySQL en Cloud SQL, consulta Crea un usuario.

Privilegios de usuario de MySQL 5.6 y 5.7

MySQL proporciona privilegios detallados que puedes otorgarle o quitarle a un usuario. Esto te permite controlar lo que un usuario puede hacer en tu instancia.

Los usuarios creados mediante Cloud SQL tienen los mismos privilegios que el usuario predeterminado de MySQL. Puedes cambiar sus privilegios mediante las declaraciones GRANT o REVOKE.

Cuando usas el cliente mysql para crear un usuario, debes otorgarle privilegios de manera explícita con la declaración GRANT.

Para obtener más información sobre los privilegios compatibles con MySQL, consulta Privilegios proporcionados por MySQL.

Privilegios de usuario de MySQL 8.0 (cloudsqlsuperuser)

En Cloud SQL para MySQL 8.0, cuando creas un usuario nuevo, se le otorga de forma automática el rol cloudsqlsuperuser. cloudsqlsuperuser es una función de Cloud SQL que contiene varios privilegios de MySQL. Esta función le otorga al usuario todos los privilegios estáticos de MySQL, a excepción de SUPER y FILE.

La función cloudsqlsuperuser solo es compatible con los siguientes privilegios dinámicos según las versiones secundarias de MySQL 8.0:

MySQL 8.0.18

MySQL 8.0.26

MySQL 8.0.27

MySQL 8.0.28

MySQL 8.0.29 (obsoleta)

MySQL 8.0.30 y posteriores

La función cloudsqlsuperuser no es compatible con ninguna operación del lenguaje de definición de datos (DDL) en la base de datos del sistema mysql.

Para ver una lista completa de los privilegios que se le otorgan a la función cloudsqlsuperuser, ejecuta la declaración SHOW GRANTS en el cliente de mysql:

SHOW GRANTS FOR 'cloudsqlsuperuser'

Privilegios de usuario de MySQL 8.4 (cloudsqlsuperuser)

Al igual que en Cloud SQL para MySQL 8.0, en Cloud SQL para MySQL 8.4, cuando creas un usuario nuevo, se le otorga automáticamente el rol cloudsqlsuperuser.

En MySQL 8.4, el rol cloudsqlsuperuser tiene los mismos privilegios que MySQL 8.0.x. Sin embargo, MySQL 8.4 tiene las siguientes diferencias principales con MySQL 8.0.x:

Además, Cloud SQL para MySQL 8.4 no otorga los privilegios TRANSACTION_GTID_TAG ni TELEMETRY_LOG_ADMIN que se introdujeron en MySQL 8.4.

¿Qué sigue?