El control de acceso detallado de Spanner combina los beneficios de Identity and Access Management (IAM) con el control de acceso tradicional basado en funciones de SQL. Con el control de acceso detallado, puedes definir los roles de la base de datos, otorgar privilegios a los roles y crear políticas de IAM para otorgar permisos a las principales de IAM en los roles de base de datos.
Como administrador, debes habilitar el control de acceso detallado para las principales de IAM individuales. Las principales para las que está habilitado el control de acceso detallado (“usuarios de control de acceso detallado”) deben asumir una función de base de datos a fin de acceder a los recursos de Spanner.
El acceso a los recursos para los usuarios que no son usuarios de control de acceso detallado se rige por las funciones de IAM a nivel de la base de datos. El control de acceso detallado es completamente compatible y puede coexistir con el control de acceso existente a nivel de la base de datos de IAM.
Con el control de acceso detallado, puedes controlar el acceso a las tablas, columnas, vistas y flujos de cambios.
Para administrar el control de acceso detallado, usa las siguientes declaraciones DDL:
- Declaraciones
CREATE
yDROP
para crear y descartar roles de base de datos Los roles de base de datos son colecciones de privilegios. Puedes crear hasta 100 funciones para una base de datos. Declaraciones
GRANT
yREVOKE
para otorgar y revocar privilegios hacia y desde las funciones de base de datos Los privilegios incluyenSELECT
,INSERT
,UPDATE
,DELETE
yEXECUTE
. Los nombres de privilegios corresponden a las instrucciones de SQL con nombres similares. Por ejemplo, una función con el privilegioINSERT
puede ejecutar la instrucción de SQLINSERT
en las tablas que se especifican en la instrucciónGRANT
.Las siguientes declaraciones DDL otorgan
SELECT
en la tablaemployees
a la función 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 detallada de privilegios de control de acceso.
Declaraciones
GRANT
para otorgar funciones a otras funciones a fin de crear jerarquías de funciones, con herencia de privilegios.
Casos de uso
Los siguientes son casos de uso de muestra para un control de acceso detallado:
- Sistema de información de RR.HH. que tiene funciones para el analista de compensaciones de ventas, la administración de ventas y el analista de RR.HH., cada uno con diferentes niveles de acceso a los datos. Por ejemplo, los analistas de compensaciones y la administración de ventas no deberían ver los números de seguridad social.
- Una aplicación de transporte privado con conductor con diferentes cuentas de servicio y privilegios para pasajeros y conductores
- Es un registro que permite las operaciones
SELECT
yINSERT
, pero no las operacionesUPDATE
yDELETE
.
Recursos de Spanner y sus privilegios
La siguiente es una lista de los recursos de Spanner y los privilegios de control de acceso detallados que puedes otorgarles.
- Tables
- Puedes otorgar los privilegios
SELECT
,INSERT
,UPDATE
yDELETE
en las tablas a las funciones de base de datos. En el caso de las tablas intercaladas, un privilegio otorgado en la tabla superior no se propaga a la tabla secundaria. - Columnas
- Puedes otorgar
SELECT
,INSERT
yUPDATE
en un subconjunto de columnas de una tabla. Entonces, el privilegio solo es válido para esas columnas.DELETE
no se permite a nivel de la columna. - Vistas
- Puedes otorgar el privilegio
SELECT
sobre una vista. Solo se admiteSELECT
para las vistas. Spanner admite las vistas de derechos del invocador y las del definidor. Si creas una vista con derechos de invocador, para consultar la vista, el usuario o la función de base de datos necesita el privilegioSELECT
en la vista y, también, el privilegioSELECT
en los objetos subyacentes a los que se hace referencia en la vista. Si creas una vista con derechos de definidor, para consultar la vista, la función de base de datos o el usuario solo necesita el privilegioSELECT
en la vista. Para obtener más información, consulta Descripción general de las vistas. - Cambiar transmisiones
- Puedes otorgar
SELECT
en los flujos de cambios. También debes otorgarEXECUTE
en la función de lectura asociada con un flujo de cambios. Si deseas obtener más información, consulta Control de acceso detallado para flujos de cambios. - Secuencias
- Puedes otorgar
SELECT
yUPDATE
en las secuencias. Si deseas obtener más información, consulta Control de acceso detallado para secuencias. - ajustables
- Puedes otorgar
EXECUTE
en los modelos. Si deseas obtener más información, consulta Control de acceso detallado para modelos.
Roles detallados del sistema de control de acceso
El control de acceso detallado tiene roles del sistema predefinidos para cada base de datos. Al igual que las funciones de base de datos definidas por el usuario, las funciones del sistema pueden controlar el acceso a los recursos de Spanner.
Por ejemplo, a un usuario de control de acceso detallado se le debe otorgar la función del sistema spanner_sys_reader
para acceder a Key Visualizer y necesita la función del sistema spanner_info_reader
para poder ver resultados sin filtros cuando se consultan las tablas INFORMATION_SCHEMA
.
Para obtener más información, consulta Funciones detalladas del sistema de control de acceso.
Jerarquías y herencia de los roles de las bases de datos
Puedes crear jerarquías de roles de bases de datos, en las que los roles secundarios heredan los privilegios de los roles superiores. Las funciones secundarias se conocen como miembros de la función superior.
Por ejemplo, considera las siguientes declaraciones 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 de la función pii_access
y heredan el privilegio SELECT
en la tabla employees
.
hr_manager
y hr_director
también pueden tener miembros, que heredarían el privilegio SELECT
en employees
.
No hay límites en cuanto a la profundidad de las jerarquías de funciones, pero el rendimiento de las consultas puede disminuir con estructuras de jerarquía de funciones amplias y profundas.
Copia de seguridad y restablecimiento
Las copias de seguridad de Spanner incluyen definiciones de roles de bases de datos. Cuando se restablece una base de datos a partir de la copia de seguridad, las funciones de la base de datos se vuelven a crear con los privilegios que se otorgaron. Sin embargo, las políticas de IAM no forman parte de las copias de seguridad de las bases de datos, por lo que debes volver a otorgar acceso a las funciones de la base de datos a las principales de la base de datos restablecida.
Descripción general de la configuración del control de acceso detallado
A continuación, se indican los pasos de alto nivel que debes seguir para comenzar a proteger los datos con un control de acceso detallado. Para obtener más detalles, consulta Configura el control de acceso detallado.
Debes tener los roles de IAM roles/spanner.admin
o roles/spanner.databaseAdmin
para realizar estas tareas.
- Crear roles de base de datos y otorgar privilegios a los roles
- Opcional: Para crear jerarquías de funciones con herencia, otorga roles a otras funciones.
- Sigue estos pasos para cada principal que sea un usuario de control de acceso detallado:
- Habilita el control de acceso detallado para la principal.
Luego, a la principal se le otorga de forma automática la función de base de datos
public
, que no tiene privilegios de forma predeterminada. Esta operación se realiza una sola vez para cada principal. - Otorga permisos de IAM a uno o más roles de base de datos a la principal.
- Una vez que a la principal se le otorguen todos los roles de base de datos necesarios, si esta tiene roles de IAM a nivel de la base de datos, considera revocar los roles a nivel de la base de datos para que el control de acceso de la principal se administre con un solo método.
- Habilita el control de acceso detallado para la principal.
Luego, a la principal se le otorga de forma automática la función de base de datos
Limitaciones
- Las operaciones de exportación no exportan roles ni privilegios de base de datos, y las operaciones de importación no pueden importarlos. Debes configurar funciones y privilegios de forma manual después de que se complete la importación.
- La pestaña Datos de la página TABLA en la consola de Google Cloud no está disponible para los usuarios de control de acceso detallados.
- Las operaciones
UPDATE
yDELETE
requierenSELECT
en todas las columnas de clave.
¿Qué sigue?
Consulta los siguientes temas para obtener más información:
- Control de acceso detallado para los flujos de cambios
- Configura el control de acceso detallado
- Referencia detallada de privilegios de control de acceso
- Funciones detalladas del sistema de control de acceso
- Instrucciones
GRANT
yREVOKE
de GoogleSQL - Declaraciones
GRANT
yREVOKE
de PostgreSQL - Control de acceso detallado para secuencias
- Control de acceso detallado para los modelos