雪花:SQL 访问控制错误:权限不足,无法对架构进行操作
Posted
技术标签:
【中文标题】雪花:SQL 访问控制错误:权限不足,无法对架构进行操作【英文标题】:Snowflake : SQL access control error: Insufficient privileges to operate on schema 【发布时间】:2019-02-08 17:00:16 【问题描述】:我已经编写了 aws 胶水作业,我试图将雪花表读取为 spark 数据帧,并尝试将 spark 数据帧写入雪花表。在这两种情况下,我的工作都未能说明“在架构上操作的权限不足”。
但是当我直接在雪花 cli 上编写插入语句时,我可以插入数据。所以基本上我有插入权限。
那么,当我尝试从数据框中插入数据或从雪花表中读取数据作为数据框时,为什么我的工作会失败?
下面是我将数据写入雪花表的代码。
sfOptions =
"sfURL" : "xt30972.snowflakecomputing.com",
"sfAccount" : "*****",
"sfUser" : "*****",
"sfPassword" : "****",
"sfDatabase" : "*****",
"sfSchema" : "******"
df=spark.read.format("csv").option("header","false").option("delimiter",',').load(aws s3 file_name)
df2.write.format("net.snowflake.spark.snowflake") \
.options(**sfOptions) \
.option("dbtable", table_name) \
.mode("append") \
.save()
【问题讨论】:
我没有雪花环境,但是基于雪花架构,你可能有没有特权的默认角色。 是的。因为我已经拥有选择、更新、插入、删除权限,我需要添加哪些权限才能将数据从 spark 数据帧写入雪花表。我只是无法在 prod 环境中添加所有权限。我需要提供特定的权限。 如果您当前的用户有多个角色,那么您可以在当前会话中使用一个角色。因此,当您在 spark 代码中创建连接时,您必须验证使用了哪个角色,但如果您没有设置任何角色,则将使用默认角色。您可以使用“显示角色”来检查默认角色。一旦您知道角色可以检查该角色的所有授权,以验证使用的角色是否具有正确的授权。 同意,但根据客户的说法,他们不想将所有授权授予任何角色。他们想要授予特定的特权。 是的,它应该非常具体,您应该在 sfoptions 中设置正确的角色。您能否将 sfRole 属性设置为具有相关角色以在目标表上写入的角色 【参考方案1】:当您使用 Snowflake CLI 时,我假设您切换到适当的角色来执行 SELECT 或 INSERT。在 Spark 上,在对表进行操作之前,您需要手动切换到具有 SELECT/INSERT 授权的角色。您可以通过以下方式执行此操作。
Utils.runQuery(sfOptions, "USE ROLE <your_role>")
这将在 Spark 会话期间切换角色。
另外,请注意 Snowflake 的访问结构是基于层次结构的。这意味着您需要对包含您尝试使用的表的数据库和模式具有“使用”权限。请确保您对使用 SELECT 或 INSERT 的角色拥有所有正确的授权。
【讨论】:
以上是关于雪花:SQL 访问控制错误:权限不足,无法对架构进行操作的主要内容,如果未能解决你的问题,请参考以下文章
在雪花中,在授予对存储过程的“使用”访问权限时,我遇到了语法错误