En esta página se describe cómo Cloud SQL funciona con usuarios de MySQL. Las cuentas de usuario MySQL brindan seguridad a la hora de controlar el acceso a las bases de datos MySQL.
Para consultar la documentación completa sobre los usuarios de MySQL, consulta Control de acceso y gestión de cuentas en la documentación de MySQL. Para obtener información sobre cómo crear y gestionar usuarios de Cloud SQL en Cloud SQL, consulta el artículo Crear y gestionar usuarios.
Por qué necesitas cuentas de usuario de MySQL
Las cuentas de usuario de MySQL te permiten iniciar sesión y administrar la instancia de Cloud SQL. También se necesitan cuentas de usuario para que las aplicaciones accedan a la instancia.
Restricciones de superusuario
En Cloud SQL, los clientes no pueden crear ni acceder a usuarios con atributos de superusuario.
Como Cloud SQL para MySQL es un servicio gestionado, restringe el acceso a ciertos procedimientos y tablas del sistema.
Los privilegios del lenguaje de manipulación de datos (DML) y del lenguaje de definición de datos (DDL) están restringidos en algunas tablas de esquemas.
A continuación se muestra la lista de tablas de sistema de MySQL 5.6 del esquema mysql que requieren permisos de escritura:
audit_log_rules_expanded
audit_log_supported_ops
audit_log_rules
cloudsql_replica_index
db
event
func
heartbeat
plugin
proc
user
tables_priv
En MySQL 5.7, la lista es la siguiente:
audit_log_rules_expanded
audit_log_supported_ops
audit_log_rules
cloudsql_replica_index
db
event
func
gtid_executed
heartbeat
plugin
proc
user
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 cuenta 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 los hosts desde los que puede conectarse. 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 intervalo de direcciones concretos para el nombre de host, o bien usar el carácter de porcentaje ("%") para dejar el nombre de host sin restricciones. Ten en cuenta que, si te conectas a tu instancia mediante direcciones IP, debes añadir la dirección IP de tu cliente como dirección autorizada, aunque el nombre de host de tu usuario no tenga restricciones.
Las cuentas de usuario se definen por tanto el nombre de usuario como el nombre de host. Por ejemplo, 'user'@'%'
es una cuenta de usuario diferente de 'user'@'localhost'
.
Usuario de MySQL predeterminado
Al crearse, las instancias de MySQL tienen una cuenta de usuario predeterminada:
'root'@'%'
. Esta cuenta se usa para conectarse a la instancia de base de datos y gestionarla 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 de root'@'%
es que no haya contraseña y MySQL no requiere que uses una contraseña para root'@'%
. Sin embargo, como root'@'%
existe en la mayoría de las instalaciones de MySQL, el usuario root'@'%
es un objetivo habitual para el acceso no autorizado.
Cualquier persona o programa que obtenga acceso a tu instancia tendrá acceso casi ilimitado a tu instancia y a tus datos, así como control sobre ellos. Por este motivo, te recomendamos que configures tu usuario root'@'%
con una contraseña segura o que lo elimines. Para obtener ayuda sobre cómo configurar la cuenta de usuario predeterminada, consulta Configurar la cuenta de usuario predeterminada.
Usuarios del sistema
Cloud SQL admite los siguientes usuarios del sistema:
root@localhost
,root@127.0.0.1
,root@::1
Se usa para proporcionar el servicio de base de datos gestionada.
cloudsqlreplica@%
Se usa como usuario de replicación para las réplicas.
cloudsqlimport@localhost
,cloudsqlimport@127.0.0.1
Se usa para las importaciones de datos.
cloudsqlexport@localhost
,cloudsqlexport@127.0.0.1
Se usa para las exportaciones de datos.
cloudsqloneshot
Se usa para otras operaciones de la base de datos.
cloudsqlapplier@localhost
Se usa para operaciones de replicación en una réplica de servidor externo o en una 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 gestión de identidades y accesos.
cloudsqlreadonly
Se usa para ejecutar operaciones de solo lectura en tablas del sistema.
No se pueden eliminar ni modificar estos usuarios.
Otras cuentas de usuario de MySQL
También puedes crear otras cuentas de usuario de MySQL. Es una buena práctica porque te permite usar diferentes cuentas de usuario de MySQL para distintos fines.
Puede crear una cuenta de usuario con un nombre de host restringido o usar comandos SQL para limitar los privilegios de sus cuentas de usuario.
Para obtener más información sobre los nombres de las cuentas de usuario, consulta Specifying Account Names (Especificar nombres de cuentas) en la documentación de MySQL. Para crear un usuario de MySQL en Cloud SQL, consulta Crear un usuario.
Privilegios de usuario de MySQL 5.6 y 5.7
MySQL proporciona privilegios específicos que puedes otorgarles a los usuarios, así como retirárselos. De esta forma, puedes controlar lo que puede hacer un usuario en tu instancia.
Los usuarios creados con Cloud SQL tienen los mismos privilegios que el usuario predeterminado de MySQL. Puedes cambiar sus privilegios con las instrucciones GRANT
o REVOKE
.
Cuando usas el cliente mysql
para crear un usuario, debes concederle privilegios de forma explícita con la instrucción GRANT
.
Si quieres obtener más información sobre los privilegios compatibles con MySQL, consulta el apartado sobre privilegios proporcionados por MySQL.
Privilegios de usuario de MySQL 8.0 (cloudsqlsuperuser
)
En Cloud SQL para MySQL 8.0, cuando creas un usuario, se le asigna automáticamente el rol cloudsqlsuperuser
. El rol cloudsqlsuperuser
es un rol de Cloud SQL que contiene varios privilegios de MySQL. Este rol otorga al usuario todos los privilegios estáticos de MySQL, excepto SUPER
y FILE
.
El rol cloudsqlsuperuser
solo admite los siguientes privilegios dinámicos basados en versiones secundarias de MySQL 8.0:
MySQL 8.0.18
MySQL 8.0.26
MySQL 8.0.27
MySQL 8.0.28
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
MySQL 8.0.29 (obsoleto)
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
SENSITIVE_VARIABLES_OBSERVER
MySQL 8.0.30 y versiones posteriores
APPLICATION_PASSWORD_ADMIN
CONNECTION_ADMIN
ROLE_ADMIN
SET_USER_ID
XA_RECOVER_ADMIN
CLOUDSQL_SPECIAL_VARIABLES_ADMIN
FLUSH_OPTIMIZER_COSTS
FLUSH_STATUS
FLUSH_TABLES
FLUSH_USER_RESOURCES
INNODB_REDO_LOG_ENABLE
SHOW_ROUTINE
AUTHENTICATION_POLICY_ADMIN
GROUP_REPLICATION_STREAM
PASSWORDLESS_USER_ADMIN
AUDIT_ABORT_EXEMPT
SENSITIVE_VARIABLES_OBSERVER
FIREWALL_EXEMPT
El rol cloudsqlsuperuser
no admite 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 concedidos al rol cloudsqlsuperuser
, ejecuta la instrucción SHOW GRANTS
en el cliente 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, se le asigna 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:
- Quita el privilegio
SET_USER_ID
y lo sustituye por los privilegiosALLOW_NONEXISTENT_DEFINER
ySET_ANY_DEFINER
, que se han introducido recientemente. - Concede
FLUSH_PRIVILEGES
como subconjunto del privilegioRELOAD
. Esta concesión no sustituye al privilegioRELOAD
, que se sigue concediendo para asegurar la retrocompatibilidad.RELOAD
- Concede el nuevo privilegio
OPTIMIZE_LOCAL_TABLE
.
Además, Cloud SQL para MySQL 8.4 no concede los privilegios TRANSACTION_GTID_TAG
ni TELEMETRY_LOG_ADMIN
introducidos en MySQL 8.4.
Siguientes pasos
- Configura la cuenta de usuario
root
de tu instancia. - Crear y administrar usuarios
- Crear y administrar bases de datos
- Consultar la documentación de MySQL sobre los usuarios de MySQL
- Consulta la documentación de MySQL sobre los privilegios que proporciona MySQL.
- Más información sobre las opciones para conectarse a la instancia