文档首页/ 数据湖探索 DLI/ 版本规划/ Spark 2.4.x与Spark 3.3.x版本差异对比/ Spark 2.4.x与Spark 3.3.x版本授权差异说明
更新时间:2025-08-15 GMT+08:00
分享

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权限是表级别的权限,需要额外对表进行授权操作。

    执行操作分区相关的语句包括:

    • 分区表相关操作

      例如对分区表执行的insert、load、select等操作。

    • 分区相关操作

      常见的执行操作分区相关的语句请参考分区相关Spark SQL语法

  • Spark2.4.x:不涉及。

执行操作数据相关语句的权限要求

  • Spark3.3.1:操作数据相关语句需要添加ALTER权限。

    INSERT TABLE

    INSERT OVERWRITE TABLE

    相关语句使用说明请参考插入数据

    TRUNCATE TABLE

    相关语句使用说明请参考清空数据

  • 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"
            ]
        }
    ]
}

相关文档