Descripción general del control de acceso detallado

El control de acceso detallado de Spanner combina los beneficios de la administración de identidades y accesos (IAM) con el control de acceso basado en funciones de SQL. Con el control de acceso detallado, puedes definir roles de base de datos, otorgarles privilegios y crear políticas de IAM para otorgar permisos sobre funciones de base de datos a principales de IAM.

Como administrador, debes habilitar el control de acceso detallado para los principales individuales de IAM. 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 para acceder a los recursos de Spanner.

El acceso a los recursos para los usuarios que no son usuarios de control de acceso detallados se rige por funciones a nivel de base de datos de IAM. 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. Puedes usarlo para acceder a objetos de base de datos individuales. Para controlar el acceso a toda la base de datos, usa las funciones de IAM.

Con el control de acceso detallado, puedes controlar el acceso a las tablas, las columnas, las vistas y los flujos de cambios.

Para administrar un control de acceso detallado, usa las siguientes declaraciones DDL:

  • Declaraciones CREATE y DROP para crear y descartar funciones 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 y REVOKE para otorgar y revocar privilegios hacia y desde funciones de base de datos. Los privilegios incluyen SELECT, INSERT, UPDATE, DELETE y EXECUTE. Los nombres de privilegios corresponden a las instrucciones de SQL con nombres similares. Por ejemplo, una función con el privilegio INSERT puede ejecutar la instrucción de SQL INSERT en las tablas especificadas en la declaración GRANT.

    Las siguientes declaraciones DDL otorgan SELECT en la tabla employees a la función 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 Referencia detallada de los privilegios de control de acceso.

  • Declaraciones GRANT para otorgar funciones a otras funciones para 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:

  • Un sistema de información de RR.HH. que tiene funciones para analista de compensaciones de ventas, administración de ventas y analista de RR.HH., cada una 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 compartido con diferentes cuentas de servicio y privilegios para pasajeros y conductores
  • Un registro 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 los recursos de Spanner y los privilegios de control de acceso detallados que puedes otorgarles.

Esquemas
Puedes otorgar el privilegio USAGE en los esquemas a roles de base de datos específicos. Para un esquema no predeterminado, las funciones de la base de datos deben tener el privilegio USAGE para acceder a los objetos de la base de datos. La verificación de privilegios tiene el siguiente aspecto:

¿Tienes USAGE en el esquema?

No: Rechazar acceso

Sí: ¿También tienes los derechos correspondientes sobre la mesa?

No: Rechazar acceso

Sí, puedes acceder a la tabla.

Tablas
Puedes otorgar los privilegios SELECT, INSERT, UPDATE y DELETE en las tablas de las funciones de bases 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 y UPDATE a un subconjunto de columnas de una tabla. Así, el privilegio solo es válido para esas columnas. DELETE no se permite a nivel de columna.
Vistas
Puedes otorgar el privilegio SELECT en una vista. Solo se admite SELECT para las vistas. Spanner admite las vistas de derechos del invocador y las vistas de derechos del definidor. Si creas una vista con derechos de invocador, para consultarla, la función de la base de datos o el usuario necesita el privilegio SELECT en la vista y también el privilegio SELECT en los objetos subyacentes a los que se hace referencia en la vista. Si creas una vista con los derechos del definidor, para consultarla, la función de la base de datos o el usuario solo necesita el privilegio SELECT en la vista. Para obtener más información, consulta Descripción general de las vistas.
Cambiar transmisiones
Puedes otorgar SELECT en flujos de cambios. También debes otorgar EXECUTE 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 y UPDATE en secuencias. Si deseas obtener más información, consulta Control de acceso detallado para secuencias.
Modelos
Puedes otorgar EXECUTE a los modelos. Si deseas obtener más información, consulta Control de acceso detallado para modelos.

Funciones detalladas 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 se necesita la función del sistema spanner_info_reader para ver resultados sin filtros cuando se consultan las tablas INFORMATION_SCHEMA.

Para obtener más información, consulta Roles detallados del sistema de control de acceso.

Jerarquías y herencia de roles de base de datos

Puedes crear jerarquías de funciones de base de datos, en las que las funciones secundarias heredan los privilegios de las funciones superiores. Las funciones secundarias se conocen como miembros de la función superior.

Por ejemplo, considera las siguientes sentencias 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.

Herencia de privilegios

hr_manager y hr_director también pueden tener miembros, que heredarán el privilegio SELECT en employees.

No hay límites en la profundidad de las jerarquías de funciones, pero el rendimiento de las consultas puede degradarse con estructuras de jerarquía de funciones profundas y amplias.

Copia de seguridad y restablecimiento

Las copias de seguridad de Spanner incluyen definiciones de roles de base de datos. Cuando se restablece una base de datos a partir de una copia de seguridad, las funciones de la base de datos se vuelven a crear con sus privilegios otorgados. Sin embargo, las políticas de IAM no forman parte de las copias de seguridad de la base de datos, por lo que debes volver a otorgar acceso a las funciones de base de datos a las principales en la base de datos restablecida.

Descripción general de la configuración del control de acceso detallado

A continuación, se muestran 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 un control de acceso detallado.

Debes tener las funciones de IAM roles/spanner.admin o roles/spanner.databaseAdmin para realizar estas tareas.

  1. Crear roles de base de datos y otorgarles privilegios
  2. Opcional: Crea jerarquías de funciones con herencia otorgando funciones a otras funciones.
  3. Realiza estos pasos para cada principal que será un usuario de control de acceso detallado:
    1. Habilita el control de acceso detallado para la principal. Luego, a la principal se le otorga automáticamente el rol de base de datos public, que no tiene privilegios de forma predeterminada. Esta es una operación única para cada principal.
    2. Otorga permisos de IAM sobre uno o más roles de base de datos a la principal.
    3. Después de que se le otorgan a la principal todos los roles de base de datos necesarios, si la principal tiene roles de IAM a nivel de la base de datos, considera revocarlos para que un solo método administre el control de acceso de la principal.

Limitaciones

  • Las operaciones de exportación no exportan las funciones y los privilegios de la base de datos, y las operaciones de importación no pueden importarlos. Debes configurar roles 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 usuarios de control de acceso detallados.
  • Las operaciones UPDATE y DELETE requieren SELECT en todas las columnas de clave.

¿Qué sigue?

Consulta los siguientes temas para obtener más información: