You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨账号场景下EMR SparkSQL创建视图为何需Glue增删表权限?

跨账号SparkSQL创建视图的Glue权限疑问

我在A账号的EMR集群上运行SparkSQL作业,从B账号的AWS Glue目录(关联S3)获取数据,执行的是创建或替换employee视图的语句,具体SQL如下:

CREATE OR REPLACE VIEW employee AS
SELECT
 pay.recordid,
        pay.employeeid,
        pay.amount,
        pay.paycode,
        pay.paydate,
        pay.paycycle,
        pay.updatetime
          FROM database.table pay 
WHERE 
pay.partition_0 in (var1)
and pay.partition_1 in (var2)
and pay.partition_2 in (var3)
and paycode = 'P1'
AND paycycle = 'M'
AND country = 'test'
AND paydate = ( SELECT DISTINCT paydate FROM default.table2
WHERE CURRENT_DATE < DATE(paydate) AND CURRENT_DATE > DATE(payperiodstart)
 AND paycycle = 'M')
 AND amount > 0;

目前必须为该作业授予Glue:CreateTable和Glue:DeleteTable权限才能成功执行,移除这两个权限则查询失败。作为Glue账号(B账号)的所有者,我仅希望授予只读权限(glue:GetDatabase、glue:GetUserDefinedFunctions、glue:GetTable、glue:GetPartitions)以降低安全风险,因此有两个疑问:

  1. 为何创建视图需要这两个增删权限?
  2. 能否仅用只读权限完成该查询?

为什么创建视图需要Glue:CreateTable和Glue:DeleteTable权限?

  • Spark处理CREATE OR REPLACE VIEW语句时,会将视图的元数据存入配置的元数据仓库。如果你的EMR集群用AWS Glue作为元存储,视图会被Glue当作特殊类型的Table管理。
  • 执行REPLACE操作时,Spark会先删除已存在的同名视图元数据(对应Glue:DeleteTable权限),再创建新的视图元数据(对应Glue:CreateTable权限)。如果作业是直接在B账号的Glue目录中创建视图,自然需要B账号Glue的这两个权限。

能否仅用只读权限完成该查询?

可以,有几种调整方式:

  • 用临时视图替代持久化视图:如果不需要把视图长期存在Glue里,仅在作业会话内使用,改成CREATE TEMP VIEW或CREATE GLOBAL TEMP VIEW。这类临时视图的元数据只在Spark作业运行期间存在,不会写入Glue,仅需B账号Glue的只读权限就能正常执行。
  • 在EMR所属账号的Glue目录创建视图:如果需要持久化视图,将视图创建在A账号自己的Glue目录中,而非B账号的目录。这时仅需对A账号的Glue有增删权限,对B账号的Glue保留只读权限即可,既满足需求又不增加B账号的安全风险。
  • 直接执行查询输出结果:如果不需要创建视图,直接运行SELECT语句将结果写入S3或其他存储,完全跳过视图创建步骤,仅需B账号Glue的只读权限和对应存储的读写权限即可。

内容的提问来源于stack exchange,提问作者Saksham Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:05:22