Información general sobre el control de acceso pormenorizado

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 y DROP 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 y REVOKE para conceder y revocar privilegios a roles de base de datos. Entre los privilegios se incluyen SELECT, INSERT, UPDATE, DELETE y EXECUTE. Los nombres de los privilegios se corresponden con las instrucciones SQL del mismo nombre. Por ejemplo, un rol con el privilegio INSERT puede ejecutar la instrucción SQL INSERT en las tablas especificadas en la instrucción GRANT.

    Las siguientes instrucciones DDL conceden SELECT en la tabla employees al rol de base de datos hr_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 y INSERT, pero no las operaciones UPDATE y DELETE.

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 privilegio USAGE 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 y DELETE 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 y UPDATE 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 admite SELECT 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 privilegio SELECT en la vista y el privilegio SELECT 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 privilegio SELECT 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 conceder EXECUTE 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 y UPDATE 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.

Herencia de privilegios

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.

  1. Crea roles de base de datos y concede privilegios a los roles.
  2. Opcional: Crea jerarquías de roles con herencia asignando roles a otros roles.
  3. Sigue estos pasos con cada principal que vaya a ser un usuario de control de acceso granular:
    1. 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.
    2. Concede permisos de gestión de identidades y accesos a la entidad principal en uno o varios roles de base de datos.
    3. 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.

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