限制的/隐藏的/内部列表和白名单(Restricted/Hidden/Internal List and Whitelist)
* hive.conf.restricted.list (属性限制列表)
默认值:
- Hive 0.11.0 :空值,但是已经隐式的包含这个列表
- Hive 0.13.0:
hive.security.authenticator.manager, hive.security.authorization.manager
- Hive 0.14.0:
hive.security.authenticator.manager, hive.security.authorization.manager, hive.users.in.admin.role
- Hive 2.1.0:
hive.security.authenticator.manager, hive.security.authorization.manager, hive.users.in.admin.role, hive.server2.xsrf.filter.enabled
- Hive 2.2.0:
hive.security.authenticator.manager, hive.security.authorization.manager,
hive.security.metastore.authorization.manager, hive.security.metastore.authenticator.manager,
hive.users.in.admin.role, hive.server2.xsrf.filter.enabled, hive.security.authorization.enabled,
hive.server2.authentication.ldap.baseDN, hive.server2.authentication.ldap.url,
hive.server2.authentication.ldap.Domain, hive.server2.authentication.ldap.groupDNPattern,
hive.server2.authentication.ldap.groupFilter, hive.server2.authentication.ldap.userDNPattern,
hive.server2.authentication.ldap.userFilter, hive.server2.authentication.ldap.groupMembershipKey,
hive.server2.authentication.ldap.userMembershipKey, hive.server2.authentication.ldap.groupClassKey,
hive.server2.authentication.ldap.customLDAPQuery
- Hive 3.0.0: 除了包含上面所有的配置项以外,还有如下的值:
hive.spark.client.connect.timeout, hive.spark.client.server.connect.timeout,
hive.spark.client.channel.log.level, hive.spark.client.rpc.max.size,
hive.spark.client.rpc.threads, hive.spark.client.secret.bits,
hive.spark.client.rpc.server.address, hive.spark.client.rpc.server.port,
hikari.*, dbcp.*, hadoop.bin.path, yarn.bin.path
该配置项在Hive 0.11.0 加入(HIVE-2935)
该配置项的值,是由逗号分隔的一些配置属性的列表,加入到列表的配置属性在运行时是不能改变的。比如,当 hive.security.authorization.enabled 设置true时,该属性就应该添加到这个列表中,这样就可以防止客户端在运行时将这个值改为false。
* hive.conf.hidden.list (属性隐藏列表)
默认值:
- Hive 1.2.2:
javax.jdo.option.ConnectionPassword,hive.server2.keystore.password
- Hive 2.3.0:
fs.s3.awsAccessKeyId,fs.s3.awsSecretAccessKey,fs.s3n.awsAccessKeyId,fs.s3n.awsSecretAccessKey,
fs.s3a.access.key,fs.s3a.secret.key,fs.s3a.proxy.password
- Hive 3.0.0:
dfs.adls.oauth2.credential,fs.adl.oauth2.credential
该配置项的值,是由逗号分隔的一些配置属性的列表,这个列表中的配置属性是不能被普通用户读的,如密码等信息。
* hive.conf.internal.variable.list (内部变量列表)
默认值:
hive.added.files.path,hive.added.jars.path,hive.added.archives.path
该配置在Hive 1.3.0 加入( HIVE-12346)
该配置项的值,是由逗号分隔的一些配置属性的列表,这个列表中的配置属性是不能通过set命令进行设置的。
* hive.security.command.whitelist (命令白名单)
默认值:set,reset,dfs,add,delete,compile[,list,reload]
该配置在 Hive 0.13.0 加入(HIVE-5400、 HIVE-5252),在Hive 0.14.0 进行修改,添加了 “list” 和 “reload” HIVE-7592 (“list”) 和 HIVE-7553 (“reload”)。
该配置项的值,是由逗号分隔的非HIVE SQL 命令的列表,列表中的命令通过授权以后用户就可以执行。该配置用以限制授权命令的设置。在Hive 0.13.0 中,支持的命令列表是 “set,reset,dfs,add,delete,compile”,从Hive 0.14.0开始支持 “set,reset,dfs,add,list,delete,reload,compile”,默认这些命令都是要经过授权的,若要限制这些命令中的任何一个,设置 hive.security.command.whitelist 为不包含该命令的值。
HIVE 客户端的安全配置
* hive.security.authorization.enabled
是否启动客户端的授权机制,默认值是false,该配置在 Hive 0.7.0 加入
* hive.security.authorization.manager
hive 客户端授权管理器的类名称,默认值是
org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider
该配置在 Hive 0.7.0 加入,用户如果需要自定义自己的授权管理器,需要实现接口
org.apache.hadoop.hive.ql.security.authorization.HiveAuthorizationProvider
该配置也可以改为基于SQL标准的授权模型:
org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly
* hive.security.authenticator.manager
hive 客户端的认证管理器的类名称,默认值是
org.apache.hadoop.hive.ql.security.HadoopDefaultAuthenticator
该配置在 Hive 0.7.0 添加,用户如果需要自定义自己的认证管理器,需要实现接口
org.apache.hadoop.hive.ql.security.HiveAuthenticationProvider
* hive.security.authorization.createtable.user.grants
* hive.security.authorization.createtable.group.grants
* hive.security.authorization.createtable.role.grants
* hive.security.authorization.createtable.owner.grants
上面四个配置的含义比较类似,就是当创建一个table时,默认授权给 user、group、role、owner的权限。这些配置在 Hive 0.7.0 添加,这几个配置默认值为空,它们的值的格式分别如下:
hive.security.authorization.createtable.user.grants : userX,userY:select;userZ:create
hive.security.authorization.createtable.group.grants : groupX,groupY:select;groupZ:create
hive.security.authorization.createtable.role.grants : roleX,roleY:select;roleZ:create
hive.security.authorization.createtable.owner.grants : select,drop
hive Metastore服务的安全配置
Hive在 0.10.0(HIVE-3705)中加入了hive Metastore侧的安全配置
* hive.metastore.pre.event.listeners
默认值为空,当databases, tables, 和 partitions创建、修改、删除的时候将会加载该配置指定的类到metastore中。该配置在 Hive 0.9.0 加入。可以将其设置为
org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener
以启动metastore的安全机制。
* hive.security.metastore.authorization.manager
hive metastore的授权管理器,默认值是
org.apache.hadoop.hive.ql.security.authorization.DefaultHiveMetastoreAuthorizationProvider
该配置在 Hive 0.10.0 加入,在 Hive 0.14.0 修订 ( HIVE-7209)
Hive 0.13.0 及之前的版本中,授权管理器的类名用以metastore的授权。用户定义的授权类需要实现接口
org.apache.hadoop.hive.ql.security.authorization.HiveMetastoreAuthorizationProvider
Hive 0.14.0 及之后的版本中,由逗号分隔的授权管理器的类名用以metastore的授权,也就是可以配置多个授权管理器,用户定义的授权类需要实现接口
org.apache.hadoop.hive.ql.security.authorization.HiveMetastoreAuthorizationProvider
必须要所有授权管理器类都成功地授权 metastore API调用,才能允许命令执行。
DefaultHiveMetastoreAuthorizationProvider 实现了一个标准Hive grant/revoke模型。 一个基于存储的授权模型也可以用以该配置项的值:
org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider
该授权模型是基于HDFS 许可来提供授权。
* hive.security.metastore.authenticator.manager
hive metastore的认证管理器,默认值是
org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator
该配置在 Hive 0.10.0 加入,用户如果需要自定义自己的认证管理器,需要实现接口
org.apache.hadoop.hive.ql.security.HiveAuthenticationProvider
* hive.security.metastore.authorization.auth.reads
默认值是true,该配置在 Hive 0.14.0 (HIVE-8221)添加
该配置如果设置为true,则会对数据库和表的读操作进行授权,也就是说当用户读取数据库或者表的时候将会检查用户是否对文件系统中相应的文件目录有读权限,当设置false时,则不会进行这样的检查。
* hive.metastore.token.signature
默认值是 “” (空字符串),该配置在 Hive 0.7.0 添加,Hive 2.1.0加入到 HiveConf。(该配置没有使用过,不了解)
基于SQL标准的授权(SQL Standard Based Authorization)
Hive 0.13.0 中引入一种基于SQL标准的授权模型,这是一个细粒度的授权模型。
* hive.users.in.admin.role
默认值:空,该配置在Hive 0.13.0 加入(HIVE-5959)
该配置是逗号分隔的用户列表,这些用户在metastore启动后都会添加到 ADMIN 角色中。
* hive.security.authorization.sqlstd.confwhitelist
默认值:空,但是已经隐式的包含了下面列出的配置项。该配置在Hive 0.13.0 加入 (HIVE-6846),并在Hive 0.14.0 更新 HIVE-8534。
该配置是一个Java 正则表达式。当使用基于SQL标准的授权模型时,匹配到该正则表达式的配置属性用户都可以修改。也就是说,该配置项的值实际就是一个配置属性的白名单列表,凡是在这个列表的配置属性,用户都可以在运行时修改。
如果该配置没有设置,会有一个默认的列表被SQLstandard authorizer 添加进来。可以使用命令 set hive.security.authorization.sqlstd.confwhitelist 列出当前版本的默认列表。
Hive 0.13.0 中的默认列表如下:
hive.exec.reducers.bytes.per.reducer
hive.exec.reducers.max
hive.map.aggr
hive.map.aggr.hash.percentmemory
hive.map.aggr.hash.force.flush.memory.threshold
hive.map.aggr.hash.min.reduction
hive.groupby.skewindata
hive.optimize.multigroupby.common.distincts
hive.optimize.index.groupby
hive.optimize.ppd
hive.optimize.ppd.storage
hive.optimize.ppd.storage
hive.ppd.recognizetransivity
hive.optimize.groupby
hive.optimize.sort.dynamic.partition
hive.optimize.skewjoin.compiletime
hive.optimize.union.remove
hive.multigroupby.singlereducer
hive.map.groupby.sorted
hive.map.groupby.sorted.testmode
hive.optimize.skewjoin
hive.optimize.skewjoin.compiletime
hive.mapred.mode
hive.enforce.bucketmapjoin
hive.exec.compress.output
hive.exec.compress.intermediate
hive.exec.parallel
hive.exec.parallel.thread.number
hive.exec.parallel.thread.number
hive.exec.rowoffset
hive.merge.mapfiles
hive.merge.mapredfiles
hive.merge.tezfiles
hive.ignore.mapjoin.hint
hive.auto.convert.join
hive.auto.convert.join.noconditionaltask
hive.auto.convert.join.noconditionaltask.size
hive.auto.convert.join.use.nonstaged
hive.auto.convert.join.noconditionaltask
hive.auto.convert.join.noconditionaltask.size
hive.auto.convert.join.use.nonstaged
hive.enforce.bucketing
hive.enforce.sorting
hive.enforce.sortmergebucketmapjoin
hive.auto.convert.sortmerge.join
hive.execution.engine
hive.vectorized.execution.enabled
hive.mapjoin.optimized.keys
hive.mapjoin.lazy.hashtable
hive.exec.check.crossproducts
hive.compat
hive.exec.dynamic.partition.mode
mapred.reduce.tasks
mapred.output.compression.codec
mapred.map.output.compression.codec
mapreduce.job.reduce.slowstart.completedmaps
mapreduce.job.queuename
该配置的默认列表,在Hive后面的版本中一直都在变化。如果一些配置符合在HiveConf.java 白名单中指定的正则表达式规范时,就会被自动的添加到这个列表中。
注意,即使配置项在该白名单列表中,还是会被 hive.conf.restricted.list 执行的。也就是说如果某个配置项在这两个列表中都有,那么会以 hive.conf.restricted.list 配置为准。
* hive.security.authorization.sqlstd.confwhitelist.append
默认值:空,该配置在Hive 0.14.0 加入 (HIVE-8534)。
第二个Java 正则表达式,该配置的白名单列表将会添加到 hive.security.authorization.sqlstd.confwhitelist 中。该配置的作用就是如果在默认的白名单列表以外,还想要添加新的配置项,可以通过该配置来完成,这样就不用修改 hive.security.authorization.sqlstd.confwhitelist 的值了。
* hive.server2.builtin.udf.whitelist
默认值:空,就是允许所有的 UDF 执行。该配置在Hive 1.1.0 加入(HIVE-8893)
该配置的值是一个由逗号分隔的内建UDF白名单列表,只有该列表中的UDF才能执行。用户如果在一个查询中使用一个不在该列表中的UDF将会返回一个错误。如果设置为空,会被认为是一个通配符,那就是所有的UDF都可以执行。注意,该配置项会在HiveServer2启动时读取,在运行时使用set命令不会修改该配置项的值。
* hive.server2.builtin.udf.blacklist
默认值:空。该配置在Hive 1.1.0 加入 (HIVE-8893)
该配置的值是一个由逗号分隔的内建UDF黑名单列表,也就是该列表中的UDF是不允许执行的。用户如果在一个查询中使用一个在该列表中的UDF将会返回一个错误。注意,该配置项会在HiveServer2启动时读取,在运行时使用set命令不会修改该配置项的值。
* hive.security.authorization.task.factory
默认值:
org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactoryImpl
该配置在Hive 1.1.0 加入(HIVE-8611)
如果要将该配置设置为其他的类以覆盖默认值,则这个类需要实现接口
org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactory