[新機能]Universal Searchの検索結果に権限がないデータベースオブジェクトを出力可能となる「OBJECT_VISIBILITY」プロパティを試してみた

[新機能]Universal Searchの検索結果に権限がないデータベースオブジェクトを出力可能となる「OBJECT_VISIBILITY」プロパティを試してみた

2025.10.05

さがらです。

Universal Searchの検索結果に権限がないデータベースオブジェクトを出力可能となる「OBJECT_VISIBILITY」プロパティがパブリックプレビューとなりました。

https://docs.snowflake.com/en/release-notes/2025/other/2025-10-01-object-visibility

この機能を試してみたので、その内容をまとめてみます。

OBJECT_VISIBILITYプロパティ

OBJECT_VISIBILITYプロパティですが、アカウント、データベース、スキーマの各レベルで設定でき、オブジェクトを誰に「見える」ようにするかを制御するプロパティとなっています。

具体例としては下記のように定義することで、「指定した組織内のアカウントの全ユーザー(account:で設定)」あるいは「組織ユーザーグループに含まれる全ユーザー(organization_user_group:で設定)」に対して、Universal Searchの検索結果に表示させる事が可能となります。

			
			ALTER DATABASE product_analytics
SET OBJECT_VISIBILITY =
$$
organization_targets:
  - account: <account_name_1>
  - account: <account_name_2>
  - ...
  - organization_user_group: <org_user_group_1>
  - organization_user_group: <org_user_group_2>
$$;

		

他のオプションやより詳細な仕様については、公式Docをご覧ください。

https://docs.snowflake.com/en/user-guide/ui-snowsight/object-visibility-universal-search

検証すること

ある組織内で以下の2アカウントがあり、「SAGARA_PRODアカウント内のデータベースをSAGARA_DEVからも検索できるようにする」ということをやってみます。

  • SAGARA_PROD:本番運用をしていると仮定したアカウント
  • SAGARA_DEV:開発専用と仮定したアカウント

事前準備

SAGARA_PRODアカウント内で適当なデータベースを作成します。

			
			-- ロールをACCOUNTADMINに設定
USE ROLE ACCOUNTADMIN;

-- ========== 1. 環境準備 ==========

-- CONTACTオブジェクトを管理するためのDBとスキーマを作成
CREATE DATABASE IF NOT EXISTS GOVERNANCE;
CREATE SCHEMA IF NOT EXISTS GOVERNANCE.CONTACTS;

-- 付与対象のSALESデータベースを作成
CREATE DATABASE IF NOT EXISTS SALES;

-- SALESデータベース配下にPUBLICスキーマとテーブルを作成
CREATE SCHEMA IF NOT EXISTS SALES.PUBLIC;
CREATE OR REPLACE TABLE SALES.PUBLIC.CUSTOMER (
    CUSTOMER_ID NUMBER,
    CUSTOMER_NAME VARCHAR,
    EMAIL VARCHAR,
    REGISTRATION_DATE DATE
);

-- ========== 2. 3種類のCONTACTオブジェクトを作成 ==========

-- 作業スキーマをCONTACTS用に切り替え
USE SCHEMA GOVERNANCE.CONTACTS;

-- (1) ユーザー用のCONTACTを作成 (Steward向け)
-- 'user1'の部分は、実際に存在するユーザー名に置き換えてください
CREATE OR REPLACE CONTACT approver_contact_user
  USERS = ('SAGARA_SATOSHI');

-- (2) Email用のCONTACTを作成 (Support向け)
CREATE OR REPLACE CONTACT support_contact_email
  EMAIL_DISTRIBUTION_LIST = 'sales-support@example.com';

-- (3) URL用のCONTACTを作成 (Approver向け)
CREATE OR REPLACE CONTACT inquiry_contact_url
  URL = 'https://classmethod.jp/inquiry/';

-- ========== 3. データベースへ3種類のCONTACTを関連付け ==========

-- ロールを再度ACCOUNTADMINに設定(念のため)
USE ROLE ACCOUNTADMIN;

-- SALESデータベースに、各目的でCONTACTを一度に関連付け
ALTER DATABASE SALES SET
  CONTACT STEWARD = GOVERNANCE.CONTACTS.approver_contact_user;
ALTER DATABASE SALES SET
  CONTACT SUPPORT = GOVERNANCE.CONTACTS.support_contact_email;
ALTER DATABASE SALES SET
  CONTACT ACCESS_APPROVAL = GOVERNANCE.CONTACTS.inquiry_contact_url;

-- ========== 4. 設定内容の確認 ==========

-- SALESデータベースに設定された全てのCONTACT情報を照会
SELECT *
FROM TABLE(SNOWFLAKE.CORE.GET_CONTACTS('SALES', 'DATABASE'));

		

最後に実行するSELECT文の結果は、下図のようになります。

2025-10-05_06h36_09

OBJECT_VISIBILITYプロパティの設定

作成したデータベースに対して、OBJECT_VISIBILITYプロパティの設定をしていきます。(おまけで、同じSAGARA_PRODアカウント内の権限を持たないユーザーからも検索できるようにしてみます。)

以下のクエリを実行すればOKです。注意点として、公式Docにもあるようにこの設定を行った後Universal Searchの結果に現れるまで数時間かかります。(私の場合は、設定後1時間では現れず、設定後8時間で検索結果に現れました。)

			
			USE ROLE ACCOUNTADMIN;

-- SALESデータベースを「同じSAGARA_PRODアカウント内の権限を持たないユーザー」、「別のSAGARA_DEVアカウントの全ユーザー」から検索可能にする
ALTER DATABASE SALES
SET OBJECT_VISIBILITY = $$
organization_targets:
  - account: SAGARA_PROD
  - account: SAGARA_DEV
$$;

		

別アカウントからUniversal Searchで検索してみる

OBJECT_VISIBILITYプロパティの設定で入れたSAGARA_DEVから、Universal Searchで検索できるかを確認してみます。(上述の通り、設定後8時間経過してから検索をしてみました。)

作成したデータベースであるsalesで検索すると、下図のようにデータベースとテーブルがヒットしました!

2025-10-05_15h59_37

また、Databases & schemasTables & viewsでは下図のように表示されます。今回は同じ組織内の別アカウントのデータが対象のためか、Request accessのボタンは見当たらず、Sign into accountが表示される形となっていました。

  • Databases & schemas

2025-10-05_16h01_14

  • Tables & views

2025-10-05_16h01_52

同じアカウントからUniversal Searchで検索してみる

もう一つおまけでOBJECT_VISIBILITYプロパティの設定で入れた同じアカウントであるSAGARA_PRODから、データベース作成に用いたACCOUNTADMINではない別のロールを使ってUniversal Searchで検索できるかを確認してみます。

作成したデータベースであるsalesで検索すると、下図のようにデータベースとテーブルがヒットしました!また、Request accessのボタンが表示されていました!

2025-10-05_16h16_30

Request accessのボタンを押すと下図のように表示されます。ACCESS_APPROVALURLを持つcontactを設定していると、下図のようにURLが表示され、問い合わせすることができます。

2025-10-05_16h18_22

最後に

Universal Searchの検索結果に権限がないデータベースオブジェクトを出力可能となる「OBJECT_VISIBILITY」プロパティを試してみました。

個人的にデータカタログに欲しい機能の中でもトップクラスに入る「閲覧権限がないデータをカタログで知り、そのままアクセスリクエストも行える」がSnowflake内で実現する日が来るとは思いませんでした…

まだパブリックプレビューのため、今後の機能拡張にも期待ができます。ぜひご活用ください!

この記事をシェアする

FacebookHatena blogX

関連記事

[新機能]Universal Searchの検索結果に権限がないデータベースオブジェクトを出力可能となる「OBJECT_VISIBILITY」プロパティを試してみた | DevelopersIO