将受限调用方权限授予应用程序中的可执行文件:¶
This topic describes how a consumer can grant caller grants to an executable in a Snowflake Native App.
关于应用程序中所有者的权利和受限调用方的权限¶
在应用程序的上下文中,支持以下类型的可执行文件:
应用程序拥有的存储过程
带有容器的应用程序中提供的服务
这些类型的可执行文件都可以配置为使用所有者权限或受限制的调用方的权限。
- 所有者权限:
By default, executables within an app use owner's rights, which means that they run with the privileges granted to the owner of the executable, which is the app itself.
例如,所有者权限允许可执行文件访问提供商账户中的数据,并将该数据提供给使用者。但是,这种权限模式不允许使用者直接访问数据。
例如,CREATE PROCEDURE 命令创建了默认使用所有者权限的存储过程。如果向使用者授予了使用应用程序角色的访问权限,则使用者可以调用该存储过程。如果应用程序具有执行某个操作的权限,则该存储过程可以执行该操作。
For general information on owner's rights, see 了解调用方权限和所有者权限存储过程.
- 受限制的调用方的权限:
Restricted caller’s rights allow an executable to run with caller’s rights, but restrict which of the caller’s privileges the executable runs with. With restricted caller’s rights, an executable owned by an app cannot run with a specific privilege unless an administrator in the consumer account explicitly allows it by using the GRANT CALLER command.
备注
为确保应用程序中可执行文件的安全性,Snowflake Native Apps 不支持不受限制的调用方权限。
有关受限制的调用方权限的一般信息,请参阅 受限制的调用方的权限。
Scope of restricted caller's rights in an app¶
Snowflake 建议使用者在容器级别授予调用方权限,而非针对其账户中的特定对象。
- 架构级别:
授予针对架构的调用方权限,但不授予对架构中对象的任何权限。例如,授予对架构的 CALLER USAGE 调用方权限只能授予对架构的 USAGE 权限。要授予对特定对象(例如函数)的访问权限,请使用 GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN SCHEMA。
- 数据库级别:
在数据库级别授予调用方权限,仅允许可执行文件访问数据库和数据库中的所有架构。例如,授予 CALLER USAGE 调用方权限将授予该数据库的 USAGE 权限。但是,要授予对特定对象的访问权限,必须使用以下命令:
GRANT INHERITED CALLER USAGE ON ALL FUNCTIONS IN DATABASE;
- 账户级别:
在账户级授予调用方授权,允许可执行文件执行账户级别的操作。授予 CALLER USAGE 调用方权限仅允许可执行文件访问账户,但不提供对账户内对象的访问权限。
要允许访问特定对象,需授予对账户中特定类型对象的访问权限。例如,授予 CREATE DATABASE 调用方权限将允许可执行文件在使用者账户中创建数据库,如以下示例所示:
GRANT CALLER CREATE DATABASE ON ACCOUNT TO my_app;
Account-level caller grants that can be granted to an app¶
提供商可以在应用程序中配置可执行文件,以使用以下账户级调用方权限:
CREATE DATABASE
EXECUTE ALERT
EXECUTE MANAGED TASK
EXECUTE TASK
READ SESSION
VIEW LINEAGE
备注
使用者在向应用程序授予账户级调用方权限时应当审慎操作。
授予应用程序受限调用方权限所需的权限¶
要以使用者身份向应用程序授予调用方权限,您必须使用 ACCOUNTADMIN 角色或使用具备 MANAGE CALLER GRANTS 权限的角色。有关更多信息,请参阅 GRANT CALLER。
使用 Snowsight 向应用程序中的可执行文件授予调用方权限¶
使用 Snowsight,您可以在使用者账户中向应用程序授予调用方权限,以访问对象。
备注
To perform other tasks, including revoking caller grants from an app, granting caller grants to a specific table, or granting account-level caller's rights, you must use the appropriate SQL commands.
Sign in to Snowsight.
In the navigation menu, select Catalog » Apps.
选择应用程序。
点击工具栏中的 Settings 图标,然后选择 Privileges 选项卡。
如果应用程序支持受限调用方权限,则 Restricted caller's rights 部分将显示在 Privileges 选项卡中。
备注
只有当提供商将应用程序配置为显示受限调用方权限 UI 时,您才能在 Snowsight 中向调用方授予权限。
点击 Add grants。
选择 Access scope。
这决定了调用方权限是适用于架构、数据库还是账户级别。您应选择范围尽可能小的选项,以避免向应用程序授予不必要的权限。
小心
选择账户级别范围时要小心,这可能会授予调用方对所有支持的对象类型的应用程序的权限。
如果您选择了架构或数据库范围,请根据需要选择架构或数据库。
备注
您可以选择多个架构或数据库。您还可以在不同的数据库中选择架构。
点击 Next。
选择将授予调用方权限的对象类型。
使用搜索来查找对象类型。对象类型列表取决于您之前选择的范围。
当您选择对象类型时,列表中相应对象的条目会展开,显示各对象类型对应的可用权限。
选择要授予的权限。
您可以为每种对象类型选择多个权限。您也可以为其他对象类型选择权限。
备注
Snowflake 会自动授予对您选择的任何对象的 USAGE 权限。
点击 Next。
选择 Grant summary 以验证您选择的范围、对象类型和权限。
备注
将来创建的选定类型的任何对象,都将使用选定的范围和对象类型,以相同的权限创建。
选择 SQL 以查看 Snowsight 将要运行的 GRANT CALLER 命令。
备注
如果需要,您可以复制这些命令并在工作表中手动运行它们。
点击 Save
您选择的范围、对象和权限会显示在 Restricted caller's rights section 中。
要修改所选权限,请点击 Edit,然后根据需要选择或取消选择权限。
使用 SQL 向应用程序中的可执行文件授予调用方权限¶
在配置请求受限调用方权限的应用程序时,请执行以下任务以授予该应用程序调用方权限:
查看应用程序列表,确认提供商是否说明该应用程序具有 RCR 可执行文件。
根据列表内容,授予调用方权限。以下示例显示如何使用 GRANT CALLER 命令向特定数据库和架构中的所有表授予 SELECT 权限:
GRANT CALLER USAGE ON DATABASE db1 TO APPLICATION hello_snowflake_app; GRANT CALLER USAGE ON SCHEMA db1.sch1 TO APPLICATION hello_snowflake_app; GRANT INHERITED CALLER SELECT ON ALL TABLES IN SCHEMA db.sch1 TO APPLICATION hello_snowflake_app;
该命令允许具有受限调用方权限的可执行文件访问
db.sch1数据库和架构中所有表上的运行查询。除了向所有表授予 SELECT 权限外,还必须向数据库和架构授予 USAGE 权限。