Hive 配置——认证和授权

原文:https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-AuthenticationandAuthorization

限制的/隐藏的/内部列表和白名单(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-5400HIVE-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
Hive 中启用 Kerberos 认证需要在 Hadoop 和 Hive 中进行相应的配置。以下是一些大致的步骤: 1. 在 Hadoop 的 core-site.xml 中添加以下属性: ``` <property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property> ``` 2. 在 Hadoop 的 hdfs-site.xml 中添加以下属性: ``` <property> <name>dfs.namenode.kerberos.principal</name> <value>hdfs/_HOST@EXAMPLE.COM</value> </property> <property> <name>dfs.datanode.kerberos.principal</name> <value>hdfs/_HOST@EXAMPLE.COM</value> </property> ``` 3. 在 Hadoop 的 yarn-site.xml 中添加以下属性: ``` <property> <name>yarn.resourcemanager.principal</name> <value>yarn/_HOST@EXAMPLE.COM</value> </property> <property> <name>yarn.nodemanager.principal</name> <value>yarn/_HOST@EXAMPLE.COM</value> </property> ``` 4. 在 Hivehive-site.xml 中添加以下属性: ``` <property> <name>hive.metastore.sasl.enabled</name> <value>true</value> </property> <property> <name>hive.metastore.kerberos.keytab.file</name> <value>/path/to/hive.keytab</value> </property> <property> <name>hive.metastore.kerberos.principal</name> <value>hive/_HOST@EXAMPLE.COM</value> </property> ``` 其中,`hive.metastore.kerberos.keytab.file` 指定的是 Hive 的 keytab 文件路径,`hive.metastore.kerberos.principal` 指定的是 Hive 的 principal 名称。 5. 在启动 Hive 的时候,需要使用以下命令来启动 Kerberos 认证: ``` kinit -kt /path/to/hive.keytab hive/_HOST@EXAMPLE.COM ``` 这个命令将会使用指定的 keytab 文件和 principal 来获取 Kerberos 的 ticket。在 ticket 过期之前,你可以使用这个 ticket 来访问 Hive。 以上是 Hive 配置 Kerberos 认证的大致步骤,具体的配置可能因环境不同而有所不同。如果你遇到了问题,可以参考官方文档或者咨询相关的技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值