使数据库对象在 Universal Search 中可被发现¶
Universal Search 可帮助您发现账户中的数据库对象。默认情况下,您只能发现已被授予访问权限的对象。即使您有权访问 Snowflake 组织内的多个账户,也无法看到所登录账户之外的对象,因为访问授权不跨账户生效。
管理员可以通过管理对象可见性,使用户能够发现尚未拥有访问权限的对象,包括 Snowflake 组织内其他账户中的对象。
备注
您可以 将对象与联系人信息相关联,这样一来,如果用户执行搜索但没有权限访问某个对象,可以选择 Request Access 以查看联系信息。
OBJECT_VISIBILITY 属性¶
OBJECT_VISIBILITY 属性用于控制账户中对象的可发现性,使没有显式访问权限的用户也能查找对象并请求访问权限。扩大账户中对象的可见性可以简化协作并精简访问请求。
OBJECT_VISIBILITY 可在账户、数据库或架构上进行设置,并遵循 Snowflake 的继承模型:除非被覆盖,否则较高层级(例如账户)的设置会自动应用于较低层级(例如数据库)。
您可以将 OBJECT_VISIBILITY 设置为以下某个值:
一份 YAML 规范,用于描述以下格式之一的可见性:
$$ organization_targets: - all_accounts_including_external $$
Or
$$ organization_targets: - account: <account_name_1> - account: <account_name_2> - ... - organization_user_group: <org_user_group_1> - organization_user_group: <org_user_group_2> $$
在上面的语法中:
all_accounts_including_external
:选择使用 时默认使用的角色和仓库。指定组织中所有账户中的所有用户都可以看到该对象。这包括组织内的所有账户,甚至包含可能已向外部方开放访问权限的账户,例如 阅读者账户。account: account_name
:选择使用 时默认使用的角色和仓库。指定账户中的所有用户均可查看该对象。您可以指定多个账户。请注意,account
是账户名称,而不是账户定位器。您必须仅指定账户名称,不包括组织名称。09-22organization_user_group: org_user_group
:选择使用 时默认使用的角色和仓库。指定 组织用户组 可在 已导入该用户组的所有组织账户 中查看该对象。
PRIVILEGED
:选择使用 时默认使用的角色和仓库。指定仅当前账户中已被显式授予该对象权限的角色,方可查看到此对象。这是 Snowflake 中的默认行为。
您随时可以将对象的可见性恢复为 PRIVILEGED。
有关具体语法、使用说明和示例,请参阅以下主题:
CREATE 命令¶
ALTER 命令¶
访问控制要求¶
使用此属性的角色必须至少具备以下权限:
权限 |
对象 |
备注 |
---|---|---|
MANAGE VISIBILITY |
账户 |
只有 SECURITYADMIN 角色默认具有此权限。可以根据需要将该权限授予其他角色。 |
OWNERSHIP |
数据库或架构 |
设置对象可见性时,需要执行 ALTER DATABASE 或 ALTER SCHEMA 语句。OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). |
有关创建具有指定权限集的自定义角色的说明,请参阅 创建自定义角色。
示例¶
将数据库设置为广泛可见¶
以下语句将 product_analytics
数据库设置为对当前账户 (ACME_ENGINEERING) 中的所有用户可见:
ALTER DATABASE product_analytics
SET OBJECT_VISIBILITY =
$$
organization_targets:
- account: acme_engineering
$$;
以下语句将数据库设置为对组织内另外两个账户(ACME_MARKETING 和 ACME_SALES)中的所有用户可见:
ALTER DATABASE product_analytics
SET OBJECT_VISIBILITY =
$$
organization_targets:
- account: acme_engineering
- account: acme_marketing
- account: acme_sales
$$;
以下语句将数据库设置为对 ACME 组织内所有账户中的所有用户可见:
ALTER DATABASE product_analytics
SET OBJECT_VISIBILITY =
$$
organization_targets:
- all_accounts_including_external
$$;
将数据库设置为对特定组织用户组可见¶
以下语句将数据库设置为对 ACME 组织内 已导入该组织用户组 的所有账户中的特定组织用户组可见:
ALTER DATABASE product_analytics
SET OBJECT_VISIBILITY =
$$
organization_targets:
- organization_user_group: engineering
- organization_user_group: marketing
- organization_user_group: sales
$$;
限制¶
可发现但不可访问的对象仅在 Universal Search 中显示。它们不会在 数据库对象资源管理器 中显示,也不会在显示元数据的 SQL 命令(SHOW 命令等)中出现。
对于某个架构,您可以将 OBJECT_VISIBILITY 属性设置为 PRIVILEGED,以替换可能从账户或数据库级别继承的任意更广泛的可见性设置,确保只有所有者才能访问该架构。
OBJECT_VISIBILITY 属性不能在架构以下的层级设置或替换。在架构级别,用户要么能看到所有对象,要么看不到任何对象。
搜索可能需要几个小时才能反映出对象可见性的更改。