通过databricks中的spark connecter向snowflake数据库授予权限

ocebsuys  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(340)

比如说,我现在使用的角色 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

nnsrf1az

nnsrf1az1#

由于覆盖模式会导致重新创建表,因此会清除表上的现有权限,因此您可以:
a) 使用append模式来重用现有的表;
b) 为相关架构中的未来表授予权限:

GRANT SELECT 
ON FUTURE TABLES 
IN SCHEMA live_database.example 
TO ROLE temp_user;

参考文献:
(一)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

相关问题