Privilegios de control de acceso detallados

En esta página, se describen los privilegios que puedes otorgar a un rol de base de datos para un control de acceso detallado.

Para obtener más información sobre los roles de las bases de datos y el control de acceso detallado, consulta Acerca del control de acceso detallado

En la siguiente tabla, se muestran los privilegios de control de acceso detallados y los objetos de base de datos. que se les pueden otorgar.

SELECT INSERT ACTUALIZAR BORRAR EJECUTAR USO
Esquema
Tabla
Columna
Ver
Flujo de cambios
Función de lectura de flujos de cambios
Secuencia
Modelo

En las siguientes secciones, se proporcionan detalles sobre cada privilegio.

SELECT

Permite que el rol lea o consulte desde una tabla, vista, flujo de cambios, secuencia o modelo.

  • Si una lista de columnas es especificado para una tabla, el privilegio solo es válido columnas. Si no se especifica una lista de columnas, el privilegio es válido en todas columnas de la tabla, incluidas las columnas que se agregan después. Una lista de columnas no es permitido para una vista.

  • Spanner admite tanto las vistas de derechos del invocador como las vistas vistas de derechos. Para obtener más información, consulta Acerca de las vistas.

    Si creas una vista con derechos de invocador, para consultarla, la base de datos o el usuario necesita el privilegio SELECT en la vista y, además, SELECT en los objetos subyacentes a los que se hace referencia en la vista. Por ejemplo: Supongamos que se crea la vista SingerNames en la tabla Singers.

    CREATE VIEW SingerNames SQL SECURITY INVOKER AS
      SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
    

    Supongamos que la función de base de datos myRole realiza la consulta SELECT * FROM SingerNames El rol debe tener el privilegio SELECT en la vista y debe tener el privilegio SELECT en las tres columnas a las que se hace referencia o en la tabla Singers completa.

    Si creas una vista con derechos de definidor, para consultarla, la base de datos El rol o usuario solo necesita el privilegio SELECT en la vista. Por ejemplo: Supongamos que se crea la vista AlbumsBudget en la tabla Albums.

    CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS
      SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
    

    Supongamos que la función de base de datos Analyst realiza la consulta SELECT * FROM AlbumsBudget El rol solo necesita el privilegio SELECT en la vista. No necesita el privilegio SELECT en las tres columnas a las que se hace referencia. o en la tabla Albums.

  • Después de otorgar SELECT en un subconjunto de columnas de una tabla, el usuario de FGAC puede ya no usar SELECT * en esa tabla. Las consultas de esa tabla deben nombrar todas columnas que se incluirán.

  • SELECT otorgado en una columna generada, no otorga SELECT en la columna columnas base.

  • En el caso de las tablas intercaladas, los SELECT otorgados en la tabla superior no propagarse a la tabla secundaria.

  • Cuando otorgas SELECT en un flujo de cambios, también debes otorgar EXECUTE en la función con valor de tabla para el flujo de cambios. Para obtener más información, consulta EXECUTE.

  • Cuando se usa SELECT con una función de agregación en columnas específicas, por SUM(col_a) de ejemplo, el rol debe tener el privilegio SELECT en esas columnas. Si la función de agregación no especifica ninguna columna, por ejemplo, COUNT(*), El rol debe tener el privilegio SELECT en al menos una columna de la tabla.

  • Cuando usas SELECT con una secuencia, solo puedes ver secuencias que tienen privilegios para ver.

Ejemplos

GoogleSQL

GRANT SELECT ON TABLE employees TO ROLE hr_director;

GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr;

GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager;

GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep;

GRANT SELECT ON VIEW orders_view TO ROLE hr_manager;

GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst;

GRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;

PostgreSQL

GRANT SELECT ON TABLE employees TO hr_director;

GRANT SELECT ON TABLE customers, orders, items TO account_mgr;

GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager;

GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep;

GRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view

GRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst;

GRANT SELECT ON SEQUENCE sequence_name TO hr_package;

INSERT

Permite que el rol inserte filas en las tablas especificadas. Si una lista de columnas es especificado, el permiso solo es válido en aquellos columnas. Si no se especifica una lista de columnas, el privilegio es válido en todas columnas de la tabla.

  • Si se especifican los nombres de las columnas, las columnas no se incluyen obtiene su valor predeterminado al momento de la inserción.

  • No se puede otorgar INSERT en las columnas generadas.

Ejemplos

GoogleSQL

GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager;

GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;

PostgreSQL

GRANT INSERT ON TABLE employees, contractors TO hr_manager;

GRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;

UPDATE

Permite que la función actualice filas en las tablas especificadas. Las actualizaciones pueden restringidas a un subconjunto de columnas de la tabla. Cuando usas esto con secuencias, Permite que el rol llame a la función get-next-sequence-value en la secuencia.

Además del privilegio UPDATE, el rol debe el privilegio SELECT en todas las columnas de clave y todas las columnas consultadas. Búsqueda incluyen columnas en la cláusula WHERE y las columnas que se usan para los valores nuevos de las columnas actualizadas y las generadas.

No se puede otorgar UPDATE en las columnas generadas.

Ejemplos

GoogleSQL

GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager;

GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;

PostgreSQL

GRANT UPDATE ON TABLE employees, contractors TO hr_manager;

GRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;

DELETE

Permite que el rol borre filas de las tablas especificadas.

  • No se puede otorgar DELETE a nivel de la columna.

  • La función también necesita SELECT en todas las columnas clave y en las que puedan incluidas en las cláusulas WHERE de la consulta.

  • Para las tablas intercaladas en las bases de datos de dialectos de GoogleSQL, la El privilegio DELETE solo es obligatorio en la tabla superior. Si una tabla secundaria especifica ON DELETE CASCADE, las filas de la tabla secundaria se borrarán incluso sin el privilegio DELETE en la tabla secundaria

Ejemplo

GoogleSQL

GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;

PostgreSQL

GRANT DELETE ON TABLE employees, contractors TO hr_admin;

EXECUTE

Cuando otorgas SELECT en un flujo de cambios, también debes otorgar EXECUTE en el read para el flujo de cambios. Para obtener más información, consulta Funciones de lectura y sintaxis de consultas de los flujos de cambios.

Cuando usas esto con modelos, permite que el rol use el modelo en funciones de aprendizaje automático.

Ejemplo

En el siguiente ejemplo, se muestra cómo otorgar EXECUTE en la función de lectura para la flujo de cambios llamado my_change_stream.

GoogleSQL

GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;

PostgreSQL

GRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;

USO

Cuando otorgas USAGE a un esquema con nombre, este proporciona privilegios para acceder que contiene el esquema con nombre. El privilegio USAGE es otorgado de forma predeterminada al esquema predeterminado.

¿Qué sigue?

Para obtener más información, consulte: