Spark 2.4.x与Spark 3.3.x版本授权差异说明
在Spark2.4.x升级Spark 3.3.x后,部分SQL语法对权限的要求有所变化。需要您在IAM管理控制台“角色或策略授权”的操作界面修改自定义策略,以满足Spark 3.3.x版本的SQL语法的权限要求。避免因权限缺失导致在Spark 3.3.x版本执行SQL作业报错或失败。
本节操作介绍使用Spark 2.4.x与Spark 3.3.x版本SQL语句对授权操作的差异。修改自定义策略的方法可以参考DLI自定义策略修改示例。
SQL作业指定currentdb场景的权限要求
- Spark 3.3.x:Spark 3.3.x提交SQL作业的接口,在指定currentdb时需要添加该数据库的DISPLAY_DATABASE权限,兼容DISPLAY_ALL_DATABASE权限。
- Spark2.4.x:不涉及。
执行操作分区相关的语句的权限要求
- Spark3.3.1:操作分区相关的语句需要添加SHOW_PARTITIONS权限。
授权对象为分区表时,如果对指定列授予SELECT权限,还需要同时对表授予SHOW_PARTITIONS权限。请注意SHOW_PARTITIONS权限是表级别的权限,需要额外对表进行授权操作。
执行操作分区相关的语句包括:
- 分区表相关操作
- 分区相关操作
常见的执行操作分区相关的语句请参考分区相关Spark SQL语法。
- Spark2.4.x:不涉及。
执行操作数据相关语句的权限要求
修改表相关语句的权限变化
- Spark3.3.1:修改表相关语句统一归为ALTER权限。
- Spark2.4.x:ALTER根据SQL语句细分为以下权限:
- ALTER_TABLE_SET_PROPERTIES,
- ALTER_TABLE_UNSET_PROPERTIES,
- ALTER_TABLE_RENAME,
- ALTER_TABLE_SERDE_PROPERTIES,
- ALTER_TABLE_SET_LOCATION,
- ALTER_TABLE_ADD_COLUMNS,
- ALTER_TABLE_CHANGE_COLUMN,
- ALTER_TABLE_ADD_PARTITION,
- ALTER_TABLE_RENAME_PARTITION,
- ALTER_TABLE_DROP_PARTITION,
- ALTER_TABLE_RECOVER_PARTITION
执行function相关语句的权限要求
- Spark3.3.1:执行以下FUNCTION相关语句时还需要新增DESCRIBE_FUNCTION权限。
- CREATE FUNCTION
- DROP FUNCTION
- USE FUNCTION
了解FUNCTION相关操作语法请参考创建函数。
- Spark2.4.x:不涉及。
View表对权限要求的变化
为了便于理解View表对权限要求的变化,我们给出一个简单的View表的查询示例:
- 用户A创建了表Table1。
- 用户B基于Table1创建了视图View1。
- 赋予用户C Table1的查询表权限后,用户C查询View失败。
不同版本的Spark引擎对View表的权限要求不同:
- Spark2.4.x:用户C具备View查询权限,且用户B具备Table1的查询权限。
对权限的要求如下:
- 用户B具备的权限:View1的管理员权限、Table1的查询权限(当前缺失)。
- 用户C具备的权限:Table1的查询表权限。
针对该场景请补充用户B对Table1的查询表权限后,用户C重试查询View1。
- Spark 3.3.x:用户C具备View查询权限,且用户C具备Table1的查询权限。
对权限的要求如下:
- 用户C具备的权限:Table1的查询表权限。View1的查询权限(当前缺失)。
针对该场景请补充用户C对View1的查询权限后,用户C重试查询View1。
DLI自定义策略修改示例
以下为自定义策略仅为修改示例,权限内容的差异点参考下述内容,按需修改具体的权限策略。
- Resource中可以按需指定具体的数据库和表名称。如对所有数据库进行修改可以删除Resource片段。
- Action中如果为只读操作可以删除“dli:table:alter”。
了解更多DLI自定义策略。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dli:table:showPartitions", "dli:database:describeFunction", "dli:database:displayDatabase", "dli:database:displayAllTables", "dli:table:alter" ], "Resource": [ "dli:*:*:database:databases.dbname", "dli:*:*:table:databases.dbname.tables.tblName" ] } ] }