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
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 (obsoleta)
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 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
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:
- Quita el privilegio
SET_USER_ID
y lo reemplaza por los privilegiosALLOW_NONEXISTENT_DEFINER
ySET_ANY_DEFINER
que se introdujeron recientemente. - Otorga
FLUSH_PRIVILEGES
como un subconjunto del privilegioRELOAD
. Esta concesión no reemplaza el privilegioRELOAD
, y este privilegio aún se otorga para brindar retrocompatibilidad.RELOAD
- Otorga el nuevo privilegio
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
root
para 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.