BigQuery Authorized Viewでの権限設定ミスによる`Access Denied`エラー対処ガイド

## 概要

承認済みデータセット（あるいは、承認済みビュー）として登録したと認識しているにもかかわらず、下記のエラーに遭遇した際の対応方法を共有します。

```text
Access Denied: Table authorized-views:source_data.sample_01: User does not have permission to query table authorized-views:source_data.sample_01, or perhaps it does not exist.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7be355ba-9543-3888-cc26-194c6cb74353.png)

承認済みデータセット（あるいは、承認済みビュー）を、ビューを保持しているデータセット（本記事では`analyst_views`）に対して、テーブルを保持しているデータセット（本記事では`source_data`）を登録するという間違いをしていたことが原因でした。対応策としては、テーブルを保持しているデータセット（本記事では`source_data`）に対して、ビューを保持しているデータセット（本記事では`analyst_views`）を登録する必要がありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3865984b-5304-0032-46c8-37447ddbac56.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/b494fcdb-f340-4f7b-3a78-ba2b8c5349d0.png)

私が誤っているということを、`Creating a BigQuery Authorized View`という cloud skills boost のコンテンツを実施することで気づけました。2024年9月17日にリリースされたとある機能に関するバグだよと思い込んでしまい、ごめんなさい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9fc06189-a190-9f68-c296-9e84212eb0f4.png)

引用元：[Creating a BigQuery Authorized View | Google Cloud Skills Boost](https://www.cloudskillsboost.google/focuses/19177?parent=catalog)

上記のトレーニングを実施するために $29 を払いました。他にも同じ誤りをしてしまった方を助けれたら、本望です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/891d47f5-48bf-524f-9692-a07ff16bc7dd.png)


## エラーの再現方法

### 1. テーブルを保持するデータセット（`source_data`）を作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/15f8664d-20de-885a-3640-a6434d5f880b.png)

### 2. テーブルを作成

```sql
CREATE TABLE source_data.sample_01 (
  int_col int,
  string_col STRING,
  date_col date
);

TRUNCATE TABLE source_data.sample_01;
INSERT INTO source_data.sample_01
(
  int_col,
  string_col,
  date_col
)
SELECT 1, 'aaa', CAST('2024-01-01' AS date)
UNION ALL
SELECT 2, 'bbb', CAST('2024-02-02' AS date)
UNION ALL
SELECT 3, 'ccc', CAST('2024-03-03' AS date)
;

SELECT * FROM source_data.sample_01;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/dc281f0c-388c-4337-ed77-27bdc090defe.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/33b64e09-f949-9c89-78a0-f0c6021b900b.png)

### 3. ビューを保持するデータセット（`analyst_views`）を作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/11f65cd8-137f-e240-3e98-67ef0f384f31.png)

### 4. ビューを作成

```sql
CREATE VIEW analyst_view.v__sample_01
AS
SELECT
  *
  FROM source_data.sample_01
;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/14dee6d7-73d2-397c-0833-397a8280655a.png)

### 5. 参照検証を行うユーザーアカウントに対してビューを保持するデータセット（`analyst_views`）に対して BigQuery Data Viewer ロールを付与

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a6db08f0-5013-78e1-efbf-d8bf9184a90e.png)

### 6. 参照検証を行うユーザーにてビューを参照してエラーとなることを確認

```text
Access Denied: Table authorized-views:source_data.sample_01: User does not have permission to query table authorized-views:source_data.sample_01, or perhaps it does not exist.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/7be355ba-9543-3888-cc26-194c6cb74353.png)

## エラーへの対応方法

### 1. 承認済みビューとして設定する方法

#### 1-1. テーブルを保持しているデータセット（`source_data`）を開き、`SHARERING` -> `Authorize Datsets`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3865984b-5304-0032-46c8-37447ddbac56.png)

#### 1-2. `Authorized dataset`ウィンドウにてビューをを保持するデータセット（`analyst_views`）を選択し、`ADD AUTHORIZATION`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/b494fcdb-f340-4f7b-3a78-ba2b8c5349d0.png)

### 1-3. `Currently authorized datasets`に項目が追加されたことを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/54d45a43-bac4-5207-a549-e767e1e1d4f9.png)

### 1-4. 参照検証を行うユーザーにてビューを参照できることを確認

```sql
SELECT
  *
  FROM
    authorized-views.analyst_view.v__sample_01
  LIMIT
    10
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/110011a9-bf76-2d26-c01d-39fe82c3826d.png)