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.com 사용자는 testdata 테이블을 포함하여 mydataset에서 테이블을 만들고, 업데이트하고, 삭제할 수 있는 권한을 상속받습니다. 그러나 이러한 권한이 testdata 테이블에 명시적으로 부여되지 않았기 때문에 두 번째 예시의 결과에는 나타나지 않습니다.