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 en 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_expandedaudit_log_supported_opsaudit_log_rulescloudsql_replica_indexdbeventfuncheartbeatpluginprocusertables_priv
Para MySQL 5.7, esta es la lista:
audit_log_rules_expandedaudit_log_supported_opsaudit_log_rulescloudsql_replica_indexdbeventfuncgtid_executedheartbeatpluginprocusertables_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 se definen 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
Cloud SQL admite los siguientes usuarios del sistema:
root@localhost,root@127.0.0.1,root@::1Se 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.1Se usa para importar datos.
cloudsqlexport@localhost,cloudsqlexport@127.0.0.1Se usa para exportar datos.
cloudsqloneshotSe usa para otras operaciones de base de datos.
cloudsqlapplier@localhostSe usa para operaciones de replicación en la réplica del servidor externo o en la replicación entre versiones principales.
cloudsqlobservabilityadminSe usa para la observabilidad de la base de datos.
cloudiamgroup@'%'Se usa para la autenticación de grupos de IAM.
cloudsqlreadonlySe usa para ejecutar operaciones de solo lectura en tablas del sistema.
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 Cómo especificar nombres de 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
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPT
MySQL 8.0.29 (obsoleta)
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPTSENSITIVE_VARIABLES_OBSERVER
MySQL 8.0.30 y posteriores
APPLICATION_PASSWORD_ADMINCONNECTION_ADMINROLE_ADMINSET_USER_IDXA_RECOVER_ADMINCLOUDSQL_SPECIAL_VARIABLES_ADMINFLUSH_OPTIMIZER_COSTSFLUSH_STATUSFLUSH_TABLESFLUSH_USER_RESOURCESINNODB_REDO_LOG_ENABLESHOW_ROUTINEAUTHENTICATION_POLICY_ADMINGROUP_REPLICATION_STREAMPASSWORDLESS_USER_ADMINAUDIT_ABORT_EXEMPTSENSITIVE_VARIABLES_OBSERVERFIREWALL_EXEMPT
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 de forma automática el rol cloudsqlsuperuser.
En MySQL 8.4, el rolcloudsqlsuperuser tiene los mismos privilegios que MySQL 8.0.x.
Sin embargo, MySQL 8.4 tiene las siguientes diferencias principales con MySQL 8.0.x:
- Quita el privilegio
SET_USER_IDy lo reemplaza por los privilegiosALLOW_NONEXISTENT_DEFINERySET_ANY_DEFINERque se acaban de introducir. - Otorga
FLUSH_PRIVILEGEScomo un subconjunto del privilegioRELOAD. Este permiso no reemplaza el privilegio deRELOAD, y este último se sigue otorgando para garantizar la compatibilidad con versiones anteriores.RELOAD - Otorga el nuevo privilegio de
OPTIMIZE_LOCAL_TABLE.
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?
- Configura la cuenta de usuario
rootpara tu instancia. - Crea y administra usuarios.
- Crea y administra bases de datos.
- Consulta la documentación de MySQL sobre usuarios de MySQL.
- Consulta la documentación de MySQL sobre privilegios proporcionados por MySQL.
- Obtén más información sobre las opciones para conectarte a tu instancia.