OBJECT_PRIVILEGES 뷰

INFORMATION_SCHEMA.OBJECT_PRIVILEGES 뷰는 BigQuery 객체에 명시적으로 설정된 액세스 제어 바인딩에 대한 메타데이터를 포함합니다. 이 뷰는 상속된 액세스 제어 바인딩에 대한 메타데이터를 포함하지 않습니다.

필수 권한

INFORMATION_SCHEMA.OBJECT_PRIVILEGES 뷰를 쿼리하려면 다음 Identity and Access Management(IAM) 권한이 필요합니다.

  • 데이터 세트의 경우 bigquery.datasets.get
  • 테이블 및 뷰의 경우 bigquery.tables.getIamPolicy

BigQuery 권한에 대한 자세한 내용은 IAM으로 액세스 제어를 참조하세요.

스키마

INFORMATION_SCHEMA.OBJECT_PRIVILEGES 뷰를 쿼리하면 리소스의 각 액세스 제어 바인딩에 대해 하나의 행이 쿼리 결과에 포함됩니다.

INFORMATION_SCHEMA.OBJECT_PRIVILEGES 뷰에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
OBJECT_CATALOG STRING 리소스가 포함된 프로젝트의 프로젝트 ID입니다.
OBJECT_SCHEMA STRING 리소스가 포함된 데이터 세트의 이름입니다. 리소스 자체가 데이터 세트인 경우 NULL입니다.
OBJECT_NAME STRING 정책이 적용되는 테이블, 뷰 또는 데이터 세트의 이름입니다.
OBJECT_TYPE STRING SCHEMA(데이터 세트), TABLE, VIEW, EXTERNAL과 같은 리소스 유형입니다.
PRIVILEGE_TYPE STRING roles/bigquery.dataEditor와 같은 역할 ID입니다.
GRANTEE STRING 역할이 부여된 사용자 유형 및 사용자입니다.

범위 및 구문

이 뷰에 대한 쿼리에는 리전 한정자가 있어야 합니다. 프로젝트 ID는 선택사항입니다. 프로젝트 ID를 지정하지 않으면 쿼리가 실행되는 프로젝트가 사용됩니다. 다음 표에는 이 뷰의 리전 범위가 나와 있습니다.

뷰 이름 리소스 범위 리전 범위
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES 프로젝트 수준 REGION
다음을 바꿉니다.

  • (선택사항) PROJECT_ID: Google Cloud 프로젝트의 ID입니다. 지정하지 않으면 기본 프로젝트가 사용됩니다.

  • REGION: 모든 데이터 세트 리전 이름입니다. 예를 들면 `region-us`입니다.

  • 예시

    -- Returns metadata for the access control bindings for mydataset.
    SELECT * FROM myproject.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE object_name = "mydataset";
    

    제한사항

    • OBJECT_PRIVILEGES 쿼리에는 단일 데이터 세트, 테이블, 뷰로 쿼리를 제한하는 WHERE 절이 있어야 합니다.
    • 데이터 세트에 대해 액세스 제어 메타데이터를 검색하는 쿼리는 object_name을 지정해야 합니다.
    • 테이블 또는 뷰의 액세스 제어 메타데이터를 검색하는 쿼리는 object_nameobject_schema를 모두 지정해야 합니다.

    예시

    다음 예시에서는 INFORMATION_SCHEMA.OBJECT_PRIVILEGES 뷰의 모든 열을 검색합니다.

    쿼리가 실행되는 프로젝트가 아닌 다른 프로젝트에 대해 쿼리를 실행하려면 `project_id`.`region_id`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES 형식으로 프로젝트 ID를 해당 리전에 추가합니다.

    다음 예시는 mycompany 프로젝트의 mydataset 데이터 세트에 대해 모든 액세스 제어 메타데이터를 가져옵니다.

    SELECT *
    FROM mycompany.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE object_name = "mydataset"
    

    다음과 같은 결과가 표시됩니다.

      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | object_catalog | object_schema | object_name | object_type |  privilege_type           | grantee                           |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataEditor | projectEditor:mycompany           |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataOwner  | projectOwner:mycompany            |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataOwner  | user:cloudysanfrancisco@gmail.com |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      | mycompany      | NULL          | mydataset   | SCHEMA      | roles/bigquery.dataViwer  | projectViewer:mycompany           |
      +----------------+---------------+-------------+-------------+---------------------------+-----------------------------------+
      

    다음 예시에서는 mydataset 데이터 세트에서 testdata 테이블에 대해 모든 액세스 제어 정보를 가져옵니다.

    SELECT *
    FROM mycompany.`region-us`.INFORMATION_SCHEMA.OBJECT_PRIVILEGES
    WHERE object_schema = "mydataset" AND object_name = "testdata"
    

    다음과 같은 결과가 표시됩니다.

      +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
      | object_catalog | object_schema |  object_name | object_type |  privilege_type      | grantee                            |
      +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
      | mycompany      | mydataset     | testdata     | TABLE       | roles/bigquery.admin | user:baklavainthebalkans@gmail.com |
      +----------------+---------------+--------------+-------------+----------------------+------------------------------------+
      

    INFORMATION_SCHEMA.OBJECT_PRIVILEGES 뷰에는 명시적으로 설정된 액세스 제어 바인딩만 표시됩니다. 첫 번째 예에서는 cloudysanfrancisco@gmail.com 사용자가 mydataset 데이터 세트에서 bigquery.dataOwner 역할을 가지고 있음을 보여줍니다. 사용자 cloudysanfrancisco@gmail.comtestdata 테이블을 비롯하여 mydataset에서 테이블을 만들고, 업데이트하고, 삭제할 권한을 상속받습니다. 그러나 이러한 권한은 testdata 테이블에 명시적으로 부여되지 않았으므로 두 번째 예시의 결과에는 표시되지 않습니다.