比如说,我现在使用的角色 main_user
,具有特定雪花数据库的完全权限,例如 live_database
. 还有一个角色当前没有任何与此数据相关的权限,例如 temp_user
. 在snowflakeui中,我可以简单地运行以下查询,临时用户可以按预期访问。
use role main_user;
grant usage on database live_database to role temp_user;
grant usage on schema live_database.example to role temp_user;
grant select on table live_database.example.sample_table to role temp_user;
我还有一个管道,它在databricks中运行一个模型,并通过spark连接器对前面提到的snowflake数据库进行读写。
不幸的是,每次我使用以下命令写入表:
# results is a PySpark dataframe containing the model results
results.write \
.format("snowflake") \
.option("sfUser", <username>) \
.option("sfPassword", <password>) \
.option("dbtable", "live_database.example.sample_table") \
...
.mode('overwrite') \
.save()
权限被重置,我必须回到雪花用户界面授予权限。有没有一种方法可以在不重置权限的情况下写入表?或者有没有办法直接从databricks运行第一个查询来授予权限?调度任务时会出现问题,因为手动更新权限会破坏调度的目的。
注意:我知道这篇文章,但我有一个databricks运行时v8,因此根据这篇文章,我的spark_连接器>v2.5.9
1条答案
按热度按时间nnsrf1az1#
由于覆盖模式会导致重新创建表,因此会清除表上的现有权限,因此您可以:
a) 使用append模式来重用现有的表;
b) 为相关架构中的未来表授予权限:
参考文献:
(一)https://docs.snowflake.com/en/user-guide/spark-connector-use.html
(二)https://community.snowflake.com/s/article/how-to-grant-select-on-all-future-tables-in-a-schema-and-database-level