Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

Controla el acceso a las tablas y vistas

En este documento, se describe cómo usar la política de acceso a tablas para controlar el acceso a las tablas y vistas. Para obtener una descripción general de las políticas de acceso a tablas, consulta Introducción a las políticas de acceso a tablas.

Después de crear una tabla o vista, puedes establecer su política de las siguientes maneras:

  • Usa la consola de Google Cloud
  • Usa el comando bq set-iam-policy
  • Mediante una llamada al método tables.setIamPolicy
  • Mediante las declaraciones del lenguaje de control de datos (DCL) GRANT o REVOKE

Puedes usar la política de acceso a tablas para configurar el acceso a las vistas y a las vistas autorizadas a nivel del conjunto de datos. Una vista también puede hacer referencia a otras tablas y vistas que compartiste mediante la política de acceso a tablas.

Antes de comenzar

Puedes usar la política de acceso a tablas en recursos de BigQuery, como tablas y vistas. Para obtener más información sobre cómo crear tablas o vistas, consulta Crea una tabla o Crea una vista.

Permisos necesarios para crear políticas de acceso

Para crear una política de acceso a tablas, necesitas el permiso bigquery.tables.setIamPolicy de Identity and Access Management (IAM).

Cada una de los siguientes roles predefinidos de IAM incluye los permisos que necesitas para crear políticas de acceso en una tabla o vista:

  • roles/bigquery.dataOwner
  • roles/bigquery.admin

Para obtener más información sobre IAM en BigQuery, consulta Control de acceso con IAM.

Permiso necesario para consultar tablas y vistas

Los usuarios necesitan el permiso bigquery.tables.getData en todas las tablas y vistas a las que hacen referencia sus consultas. Además, cuando se consulta una vista, los usuarios necesitan este permiso en todas las tablas y vistas subyacentes. Sin embargo, si usas vistas autorizadas o conjuntos de datos autorizados, no es necesario que los usuarios tengan acceso a los datos de origen subyacentes.

Cada uno de los siguientes roles predefinidos de IAM incluye el permiso que los usuarios necesitan en todas las tablas y vistas a las que hace referencia la consulta:

  • roles/bigquery.admin
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.dataViewer

Crea una política de acceso

Para crear una política de acceso en una tabla o vista, haz lo siguiente:

Consola

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.

  3. Expande el conjunto de datos y selecciona una tabla o vista.

  4. Haz clic en Compartir.

  5. En la página Compartir, para agregar un usuario (o principal), haz clic en Agregar principal.

  6. En la página Agregar principales, haz lo siguiente:

    • En Nuevas principales, ingresa un usuario. Puedes agregar usuarios individuales, grupos, cuentas de servicio y dominios de lugar de trabajo.
    • En la lista desplegable Seleccionar un rol, selecciona el rol que deseas otorgar al usuario.
    • Haz clic en Agregar condición a fin de agregar acceso condicional para el usuario.
  7. Haz clic en Guardar a fin de guardar los cambios para el usuario nuevo.

  8. Haz clic en Cerrar para cerrar la página Compartir.

SQL

Para otorgar funciones a los usuarios, usa la declaración DCL GRANT:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ingresa la siguiente sentencia:

    GRANT `ROLE_LIST`
    ON TABLE DATASET.TABLE_OR_VIEW
    TO 'USER_LIST';
    

    Reemplaza lo siguiente:

    • ROLE_LIST: Una función o una lista de funciones separadas por comas que contiene los permisos que deseas otorgar, como roles/bigquery.dataViewer
    • DATASET: Es el nombre del conjunto de datos en el que se encuentra el recurso
    • TABLE_OR_VIEW: La tabla o vista desde la que revocas el acceso
    • USER_LIST: Una lista separada por comas de usuarios a los que se otorga el rol, como user:joe@example.com

  3. Haz clic en Ejecutar.

Si quieres obtener información para ejecutar consultas, visita Ejecuta consultas interactivas.

bq

  1. Recupera la política existente en un archivo local.

    bq get-iam-policy \
     project-id:dataset.table_or_view \
     > policy.json
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • project-id es el ID del proyecto.
    • dataset es el nombre del conjunto de datos que contiene el recurso (tabla o vista) que deseas actualizar.
    • table_or_view es el nombre del recurso que deseas actualizar.

    A continuación, se presentan más ejemplos de la identificación de una tabla o vista y el redireccionamiento del resultado de la política a un archivo:

    • bq get-iam-policy dataset1.table1 > policy.json
    • bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
    • bq get-iam-policy project1:dataset1.table1 > policy.json
  2. Si aún no agregaste miembros a la política, el archivo policy.json contendrá un valor etag y ningún otro campo. Si deseas obtener más información para dar formato al archivo policy.json, consulta Información sobre las políticas.

  3. Para agregar el primer miembro, agrega un campo bindings a la política. Por ejemplo, para otorgar la función de visualizador de datos de BigQuery (roles/bigquery.dataViewer) a joe@example.com, ejecuta el siguiente comando:

    "bindings": [
     {
       "members": [
         "user:joe@example.com"
       ],
       "role": "roles/bigquery.dataViewer"
     }
    ]
    

    Si necesitas agregar más miembros a una vinculación existente, solo agrega el miembro. En este ejemplo, se muestra cómo otorgar a jane@example.com la función de visualizador de datos de BigQuery (roles/bigquery.dataViewer) para una vinculación que ya existe.

    "members": [
           "user:joe@example.com",
           "user:jane@example.com"
         ],
         "role": "roles/bigquery.dataViewer"
       }
    
  4. Actualiza la política.

    bq set-iam-policy \
     project-id:dataset.table_or_view \
     policy.json
    

    Para obtener información sobre las versiones de esquema de las políticas de IAM, consulta Versiones de políticas.

API

  1. Llama a tables.getIamPolicy para recuperar la política actual.

  2. Edita la política para agregar miembros o vinculaciones. Consulta el ejemplo de bq sobre el formato de la política.

  3. Llama a tables.setIamPolicy para escribir la política nueva.

Para obtener información sobre las versiones de esquema de las políticas de IAM, consulta Versiones de políticas.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.Role;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;

// Sample to create iam policy for table
public class CreateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    createIamPolicy(datasetName, tableName);
  }

  public static void createIamPolicy(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      policy
          .toBuilder()
          .addIdentity(Role.of("roles/bigquery.dataViewer"), Identity.allUsers())
          .build();
      bigquery.setIamPolicy(tableId, policy);
      System.out.println("Iam policy created successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not created. \n" + e.toString());
    }
  }
}

Actualiza una política de acceso

Para actualizar una política de acceso en una tabla o vista, haz lo siguiente:

Consola

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.

  3. Expande el conjunto de datos y selecciona una tabla o vista.

  4. Haz clic en Compartir.

  5. En la página Compartir, haz lo siguiente:

    • Para agregar usuarios nuevos, sigue los pasos que se muestran en Crea una política de acceso.

    • Para quitar el acceso de un usuario, búscalo mediante el campo Buscar o expande el rol al que pertenece el usuario. En el usuario que deseas quitar, haz clic en Borrar .

    • Para modificar el acceso de un usuario, haz clic en Editar .

  6. Haz clic en Guardar cuando hayas realizado los cambios.

  7. Haz clic en Cerrar para cerrar la página Compartir.

SQL

Para quitar funciones de los usuarios en una tabla o vista en tu conjunto de datos, usa la declaración DCL REVOKE:

  1. En la consola de Google Cloud, ve a la página de BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, ingresa la siguiente sentencia:

    REVOKE `ROLE_LIST`
    ON TABLE DATASET.TABLE_OR_VIEW
    FROM 'USER_LIST';
    

    Reemplaza lo siguiente:

    • ROLE_LIST: Una función o una lista de funciones separadas por comas que contiene los permisos que deseas otorgar, como roles/bigquery.dataViewer
    • DATASET: Es el nombre del conjunto de datos en el que se encuentra el recurso
    • TABLE_OR_VIEW: La tabla o vista desde la que revocas el acceso
    • USER_LIST: Una lista separada por comas de usuarios a los que se otorga el rol, como user:joe@example.com

  3. Haz clic en Ejecutar.

Si quieres obtener información para ejecutar consultas, visita Ejecuta consultas interactivas.

bq

  1. Recupera la política existente en un archivo local.

    bq get-iam-policy --format=prettyjson \
     project-id:dataset.table_or_view \
     > policy.json
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • project-id es el ID del proyecto.
    • dataset es el nombre del conjunto de datos que contiene la tabla que deseas actualizar.
    • table_or_view es el nombre de la tabla o vista que deseas actualizar.

    A continuación, se presentan más ejemplos de la identificación de una tabla o vista y el redireccionamiento del resultado de la política a un archivo:

    • bq get-iam-policy dataset1.table1 > policy.json
    • bq get-iam-policy --project_id=project1 -t dataset1.table1 > policy.json
    • bq get-iam-policy project1:dataset1.table1 > policy.json
  2. Modifica policy.json según sea necesario.

    Si deseas obtener más información para dar formato al archivo policy.json, consulta Información sobre las políticas.

    Para obtener información sobre las versiones de esquema de las políticas de IAM, consulta Versiones de políticas.

  3. Actualiza la política.

    bq set-iam-policy \
     project-id:dataset.table_or_view \
     policy.json
    

API

  1. Llama a tables.getIamPolicy para recuperar la política actual.

  2. Edita la política para agregar miembros o vinculaciones.

    Para obtener más información sobre el formato de una política, consulta el tema de referencia Política.

  3. Llama a tables.setIamPolicy para escribir la política actualizada.

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

import com.google.cloud.Identity;
import com.google.cloud.Policy;
import com.google.cloud.Role;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

// Sample to update iam policy in table
public class UpdateIamPolicy {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    updateIamPolicy(datasetName, tableName);
  }

  public static void updateIamPolicy(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, tableName);

      Policy policy = bigquery.getIamPolicy(tableId);
      Map<Role, Set<Identity>> binding = new HashMap<>(policy.getBindings());
      binding.remove(Role.of("roles/bigquery.dataViewer"));

      policy.toBuilder().setBindings(binding).build();
      bigquery.setIamPolicy(tableId, policy);

      System.out.println("Iam policy updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Iam policy was not updated. \n" + e.toString());
    }
  }
}

Para obtener más información sobre las políticas de administración de identidades y accesos, consulta Información sobre las políticas y el tema de referencia Política.

¿Qué sigue?