更新时间:2024-07-24 GMT+08:00

配置Spark表、列和数据库的用户权限

操作场景

使用SparkSQL操作表或者数据库时,如果用户访问别人创建的表或数据库,需要授予对应的权限。为了实现更严格权限控制,SparkSQL也支持列级别的权限控制。如果要访问别人创建的表上某些列,需要授予列权限。以下介绍使用Manager角色管理功能在表授权、列授权和数据库授权三个场景下的操作。

操作步骤

SparkSQL表授权、列授权、数据库授权与Hive的操作相同,详情请参见Hive用户权限管理

  • 在权限管理中,为了方便用户使用,授予数据库下表的任意权限将自动关联该数据库目录的HDFS权限。为了避免产生性能问题,取消表的任意权限,系统不会自动取消数据库目录的HDFS权限,但对应的用户只能登录数据库和查看表名。
  • 若为角色添加或删除数据库的查询权限,数据库中的表也将自动添加或删除查询权限。此机制为Hive实现,SparkSQL与Hive保持一致。
  • Spark不支持struct数据类型中列名称含有特殊字符(除字母、数字、下划线外的其他字符)。如果struct类型中列名称含有特殊字符,在FusionInsight Manager的“编辑角色”页面进行授权时,该列将无法正确显示。

相关概念

SparkSQL的语句在SparkSQL中进行处理,权限要求如表1所示。

表1 使用SparkSQL表、列或数据库场景权限一览

操作场景

用户需要的权限

CREATE TABLE

“创建”,RWX+ownership(for create external table - the location)

说明:

按照指定文件路径创建datasource表时,需要path后面文件的RWX+ownership权限。

DROP TABLE

“Ownership”(of table)

DROP TABLE PROPERTIES

“Ownership”

DESCRIBE TABLE

“查询”

SHOW PARTITIONS

“查询”

ALTER TABLE LOCATION

“Ownership”,RWX+ownership (for new location)

ALTER PARTITION LOCATION

“Ownership”,RWX+ownership (for new partition location)

ALTER TABLE ADD PARTITION

“插入”,RWX+ownership (for partition location)

ALTER TABLE DROP PARTITION

“删除”

ALTER TABLE(all of them except the ones above)

“Update”“Ownership”

TRUNCATE TABLE

“Ownership”

CREATE VIEW

“查询”“Grant Of Select”“创建”

ALTER VIEW PROPERTIES

“Ownership”

ALTER VIEW RENAME

“Ownership”

ALTER VIEW ADD PARTS

“Ownership”

ALTER VIEW AS

“Ownership”

ALTER VIEW DROPPARTS

“Ownership”

ANALYZE TABLE

“查询”“插入”

SHOW COLUMNS

“查询”

SHOW TABLE PROPERTIES

“查询”

CREATE TABLE AS SELECT

“查询”“创建”

SELECT

“查询”

说明:

与表一样,对视图进行SELECT操作的时候需要有该视图的“查询”权限。

INSERT

“插入”“删除 (for overwrite)”

LOAD

“插入”“删除”,RWX+ownership(input location)

SHOW CREATE TABLE

“查询”“Grant Of Select”

CREATE FUNCTION

“管理”

DROP FUNCTION

“管理”

DESC FUNCTION

-

SHOW FUNCTIONS

-

MSCK (metastore check)

“Ownership”

ALTER DATABASE

“管理”

CREATE DATABASE

-

SHOW DATABASES

-

EXPLAIN

“查询”

DROP DATABASE

“Ownership”

DESC DATABASE

-

CACHE TABLE

“查询”

UNCACHE TABLE

“查询”

CLEAR CACHE TABLE

“管理”

REFRESH TABLE

“查询”

ADD FILE

“管理”

ADD JAR

“管理”

HEALTHCHECK

-