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 roles de SQL. Con el control de acceso detallado, puedes definir roles de base de datos, otorgar privilegios a los roles y crear políticas de IAM para otorgar permisos sobre roles de base de datos a principales de IAM.
Como administrador, debes habilitar el control de acceso detallado para los principales de IAM individuales. Los principales para los que está habilitado el control de acceso detallado ("usuarios de control de acceso detallado") 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 son usuarios de control de acceso detallado se rige por los roles a nivel de la base de datos de IAM. El control de acceso detallado es totalmente compatible y puede coexistir con el control de acceso a nivel de la base de datos de IAM existente. Puedes usarlo para acceder a objetos individuales de la base de datos. Para controlar el acceso a toda la base de datos, usa roles 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 instrucciones de DDL:
- Sentencias
CREATE
yDROP
para crear y descartar roles de base de datos Los roles de la base de datos son colecciones de privilegios. Puedes crear hasta 100 roles para una base de datos. Sentencias
GRANT
yREVOKE
para otorgar y revocar privilegios a roles de base de datos y desde ellos Los privilegios incluyenSELECT
,INSERT
,UPDATE
,DELETE
yEXECUTE
. Los nombres de los privilegios corresponden a las instrucciones de SQL con nombres similares. Por ejemplo, un rol 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
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 privilegios de control de acceso detallado.
Sentencias
GRANT
para otorgar roles a otros roles y crear jerarquías de roles con herencia de privilegios
Casos de uso
Los siguientes son ejemplos de casos de uso para el control de acceso detallado:
- Un sistema de información de recursos humanos que tenga roles para analista de compensación de ventas, administración de ventas y analista de RR.HH., cada uno con diferentes niveles de acceso a los datos. Por ejemplo, los analistas de compensación y la administración de ventas no deberían ver los números de seguridad social.
- Una aplicación de transporte privado con diferentes cuentas de servicio y privilegios para pasajeros y conductores.
- Un libro mayor que permite operaciones
SELECT
yINSERT
, pero no operacionesUPDATE
niDELETE
Recursos de Spanner y sus privilegios
La siguiente es una lista de los recursos de Spanner y los privilegios de control de acceso detallado que puedes otorgarles.
- Esquemas
- Puedes otorgar el privilegio
USAGE
en esquemas a roles específicos de la base de datos. Para un esquema que no sea predeterminado, los roles de la base de datos deben tener el privilegioUSAGE
para acceder a los objetos de la base de datos. La verificación de privilegios se ve de la siguiente manera:
¿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 otorgar los privilegios
SELECT
,INSERT
,UPDATE
yDELETE
en las tablas a los roles de la 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. El privilegio solo es válido para esas columnas.DELETE
no se permite a nivel de la columna. - Vistas
- Puedes otorgar el privilegio
SELECT
en una vista. Solo se admiteSELECT
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, el rol o el usuario de la 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 consultarla, el rol de la 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. Para obtener información, consulta Control de acceso detallado para los flujos de cambios. - Secuencias
- Puedes otorgar
SELECT
yUPDATE
en secuencias. Para obtener información, consulta Control de acceso detallado para secuencias. - Modelos
- Puedes otorgar
EXECUTE
en los modelos. Para obtener información, consulta Control de acceso detallado para modelos.
Roles del sistema de control de acceso detallado
El control de acceso detallado 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, a un usuario de control de acceso detallado se le debe otorgar el rol del sistema spanner_sys_reader
para acceder al Visualizador de claves y el rol del sistema spanner_info_reader
para poder ver resultados sin filtrar cuando se consultan las tablas INFORMATION_SCHEMA
.
Para obtener más información, consulta Roles del sistema de control de acceso detallado.
Jerarquías y herencia de roles de la base de datos
Puedes crear jerarquías de roles de base de datos, en las que los roles secundarios héritan los privilegios de los roles superiores. Los roles secundarios se conocen como miembros del rol superior.
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 podría degradarse con estructuras de jerarquía de roles 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, los roles de la base de datos se vuelven a crear con los 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 los roles de la base de datos a los 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 generales que debes seguir para comenzar a proteger los datos con un control de acceso detallado. Para obtener más información, consulta Configura el control de acceso detallado.
Para realizar estas tareas, debes tener los roles de IAM roles/spanner.admin
o roles/spanner.databaseAdmin
.
- Crea roles de base de datos y otorga privilegios a los roles.
- Opcional: Crea jerarquías de roles con herencia otorgando roles a otros roles.
- Realiza estos pasos para cada principal que será un usuario de control de acceso detallado:
- Habilita el control de acceso detallado para el principal.
Luego, se le otorga automáticamente al principal el rol de base de datos
public
, que no tiene privilegios de forma predeterminada. Esta es una operación única para cada principal. - Otorgar permisos de IAM en uno o más roles de la base de datos al principal
- Después de que se le otorguen todos los roles de base de datos requeridos al principal, si este 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 del principal se administre con un solo método.
- Habilita el control de acceso detallado para el principal.
Luego, se le otorga automáticamente al principal el rol de base de datos
Limitaciones
- Las operaciones de exportación no exportan roles ni privilegios de la base de datos, y las operaciones de importación no pueden importarlos. Debes configurar manualmente los roles y los privilegios después de completar la importación.
- La pestaña Datos de la página TABLA de la consola de Google Cloud no está disponible para los usuarios de control de acceso detallado.
¿Qué sigue?
Consulta los siguientes temas para obtener más información:
- Cómo acceder a una base de datos con control de acceso detallado
- Control de acceso detallado para los flujos de cambios
- Configura el control de acceso detallado
- Referencia de privilegios de control de acceso detallado
- Roles del sistema de control de acceso detallado
- Sentencias
GRANT
yREVOKE
de GoogleSQL - Sentencias
GRANT
yREVOKE
de PostgreSQL - Control de acceso detallado para secuencias
- Control de acceso detallado para los modelos