El control de acceso pormenorizado de Spanner combina las ventajas de Gestión de Identidades y Accesos (IAM) con el control de acceso basado en roles de SQL. Con el control de acceso pormenorizado, puedes definir roles de base de datos, conceder privilegios a los roles y crear políticas de gestión de identidades y accesos para conceder permisos sobre los roles de base de datos a las entidades de gestión de identidades y accesos. En esta página se describe cómo usar el control de acceso granular con Spanner para bases de datos con dialecto GoogleSQL y con dialecto PostgreSQL.
Como administrador, debes habilitar el control de acceso pormenorizado para cada principal de gestión de identidades y accesos. Las entidades a las que se les ha habilitado el control de acceso pormenorizado ("usuarios con control de acceso pormenorizado") deben asumir un rol de base de datos para acceder a los recursos de Spanner.
El acceso a los recursos de los usuarios que no tienen el control de acceso pormenorizado se rige por los roles de gestión de identidades y accesos a nivel de base de datos. El control de acceso pormenorizado es totalmente compatible y puede coexistir con el control de acceso a nivel de base de datos de gestión de identidades y accesos. Puedes usarlo para acceder a objetos de bases de datos concretos. Para controlar el acceso a toda la base de datos, usa roles de gestión de identidades y accesos.
Con el control de acceso pormenorizado, puedes controlar el acceso a tablas, columnas, vistas y flujos de cambios.
Para gestionar el control de acceso pormenorizado, se usan las siguientes instrucciones DDL:
- Instrucciones
CREATE
yDROP
para crear y eliminar roles de base de datos. Los roles de base de datos son conjuntos de privilegios. Puedes crear hasta 100 roles para una base de datos. Sentencias
GRANT
yREVOKE
para conceder y revocar privilegios a roles de base de datos. Entre los privilegios se incluyenSELECT
,INSERT
,UPDATE
,DELETE
yEXECUTE
. Los nombres de los privilegios se corresponden con las instrucciones SQL del mismo nombre. Por ejemplo, un rol con el privilegioINSERT
puede ejecutar la instrucción SQLINSERT
en las tablas especificadas en la instrucciónGRANT
.Las siguientes instrucciones DDL conceden
SELECT
en la tablaemployees
al rol de base de datoshr_rep
.GoogleSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO ROLE hr_rep;
PostgreSQL
CREATE ROLE hr_rep; GRANT SELECT ON TABLE employees TO hr_rep;
Para obtener más información sobre los privilegios, consulta la referencia de los privilegios de control de acceso granular.
Instrucciones
GRANT
para asignar roles a otros roles y crear jerarquías de roles con herencia de privilegios.
Casos prácticos
Estos son algunos ejemplos de casos prácticos de control de acceso pormenorizado:
- Un sistema de información de recursos humanos que tiene roles para analista de compensación de ventas, gestión de ventas y analista de recursos humanos, cada uno con diferentes niveles de acceso a los datos. Por ejemplo, los analistas de remuneraciones y los responsables de ventas no deberían ver los números de la Seguridad Social.
- Una aplicación de viajes compartidos con diferentes cuentas de servicio y privilegios para pasajeros y conductores.
- Un libro de contabilidad que permite las operaciones
SELECT
yINSERT
, pero no las operacionesUPDATE
yDELETE
.
Recursos de Spanner y sus privilegios
A continuación, se muestra una lista de recursos de Spanner y los privilegios de control de acceso granular que puedes conceder para ellos.
- Esquemas
- Puedes conceder el privilegio
USAGE
en esquemas a roles de base de datos específicos. En el caso de los esquemas que no sean predeterminados, los roles de base de datos deben tener el privilegioUSAGE
para acceder a los objetos de la base de datos. La comprobación de privilegios tiene el siguiente aspecto:
¿Tienes USAGE
en el esquema?
No: rechaza el acceso.
Sí: ¿también tienes los derechos adecuados en la tabla?
No: rechaza el acceso.
Sí: puedes acceder a la tabla.
- Tablas
- Puedes conceder los privilegios
SELECT
,INSERT
,UPDATE
yDELETE
en tablas a los roles de la base de datos. En las tablas intercaladas, los privilegios concedidos en la tabla principal no se propagan a la tabla secundaria. - Columnas
- Puede conceder los permisos
SELECT
,INSERT
yUPDATE
en un subconjunto de columnas de una tabla. El privilegio solo será válido para esas columnas.DELETE
no se permite a nivel de columna. - Vistas
- Puede conceder el privilegio
SELECT
en una vista. Solo se admiteSELECT
en las vistas. Spanner admite vistas con derechos del invocador y vistas con derechos del definidor. Si creas una vista con derechos del invocador, para consultar la vista, el rol o el usuario de la base de datos necesita el privilegioSELECT
en la vista y el privilegioSELECT
en los objetos subyacentes a los que se hace referencia en la vista. Si crea una vista con derechos del definidor, para consultar la vista, el rol o el usuario de la base de datos solo necesita el privilegioSELECT
en la vista. Para obtener más información, consulta el artículo Descripción general de las vistas .
- Flujo de cambios
- Puedes conceder
SELECT
en los flujos de cambios. También debes concederEXECUTE
en la función de lectura asociada a un flujo de cambios. Para obtener más información, consulta Control de acceso pormenorizado para secuencias de cambios. - Secuencias
- Puedes conceder
SELECT
yUPDATE
en secuencias. Para obtener más información, consulta Control de acceso pormenorizado para secuencias. - Modelos
- Puedes conceder
EXECUTE
en los modelos. Para obtener más información, consulta Control de acceso pormenorizado para modelos.
Roles del sistema de control de acceso pormenorizado
El control de acceso pormenorizado tiene roles del sistema predefinidos para cada base de datos. Al igual que los roles de base de datos definidos por el usuario, los roles del sistema pueden controlar el acceso a los recursos de Spanner.
Por ejemplo, un usuario con control de acceso detallado debe tener asignado el rol de sistema spanner_sys_reader
para acceder a Key Visualizer y el rol de sistema spanner_info_reader
para poder ver resultados sin filtrar al consultar las tablas INFORMATION_SCHEMA
.
Para obtener más información, consulta Roles del sistema de control de acceso pormenorizado.
Jerarquías y herencias de roles de bases de datos
Puede crear jerarquías de roles de base de datos, donde los roles secundarios heredan los privilegios de los roles principales. Las funciones secundarias se denominan miembros de la función principal.
Por ejemplo, considera las siguientes instrucciones GRANT
:
GoogleSQL
GRANT SELECT ON TABLE employees TO ROLE pii_access;
GRANT ROLE pii_access TO ROLE hr_manager, hr_director;
PostgreSQL
GRANT SELECT ON TABLE employees TO pii_access;
GRANT pii_access TO hr_manager, hr_director;
hr_manager
y hr_director
son miembros del rol pii_access
y heredan el privilegio SELECT
en la tabla employees
.
hr_manager
y hr_director
también pueden tener miembros, y esos miembros heredarían el privilegio SELECT
en employees
.
No hay límites en la profundidad de las jerarquías de roles, pero el rendimiento de las consultas puede disminuir si las estructuras de jerarquía de roles son profundas y amplias.
Copia de seguridad y restauración
Las copias de seguridad de Spanner incluyen definiciones de roles de base de datos. Cuando se restaura una base de datos a partir de una copia de seguridad, se vuelven a crear los roles de la base de datos con los privilegios que se les habían concedido. Sin embargo, las políticas de gestión de identidades y accesos no forman parte de las copias de seguridad de las bases de datos, por lo que debes volver a conceder acceso a los roles de la base de datos a las entidades de la base de datos restaurada.
Información general sobre la configuración del control de acceso pormenorizado
A continuación, se describen los pasos generales que debes seguir para empezar a proteger los datos con un control de acceso detallado. Para obtener más información, consulta Configurar el control de acceso pormenorizado.
Para realizar estas tareas, debes tener asignados los roles de gestión de identidades y accesos roles/spanner.admin
o roles/spanner.databaseAdmin
.
- Crea roles de base de datos y concede privilegios a los roles.
- Opcional: Crea jerarquías de roles con herencia asignando roles a otros roles.
- Sigue estos pasos con cada principal que vaya a ser un usuario de control de acceso granular:
- Habilita el control de acceso pormenorizado para la entidad de seguridad.
A la entidad de seguridad se le asigna automáticamente el rol de base de datos
public
, que no tiene privilegios de forma predeterminada. Esta operación solo se realiza una vez por cada principal. - Concede permisos de gestión de identidades y accesos a la entidad principal en uno o varios roles de base de datos.
- Una vez que se hayan asignado todos los roles de base de datos necesarios a la entidad de seguridad, si esta tiene roles de gestión de identidades y accesos a nivel de base de datos, considera revocar estos roles para que el control de acceso de la entidad de seguridad se gestione con un solo método.
- Habilita el control de acceso pormenorizado para la entidad de seguridad.
A la entidad de seguridad se le asigna automáticamente el rol de base de datos
Limitaciones
- Las operaciones de exportación no exportan roles ni privilegios de bases de datos, y las operaciones de importación no pueden importarlos. Debe configurar manualmente los roles y los privilegios una vez que haya completado la importación.
- La pestaña Datos de la página TABLE de la consola de Google Cloud no está disponible para los usuarios con control de acceso granular.
Siguientes pasos
- Acceder a una base de datos con un control de acceso pormenorizado
- Control de acceso pormenorizado para flujos de cambios
- Configurar el control de acceso granular
- Referencia de los privilegios de control de acceso granular
- Roles del sistema de control de acceso granular
- Instrucciones
GRANT
yREVOKE
de GoogleSQL - Instrucciones
GRANT
yREVOKE
de PostgreSQL - Control de acceso granular para secuencias
- Control de acceso granular para modelos