天天看點

cm6.2配置sentry

基于cloudera-manager6.2部署sentry

系統:centos 6.8

因為我是本地電腦開的幾個虛拟機,為了減少記憶體,我把監控服務停了,報黃都可以忽略,伺服器上都是正常綠色的。

首先開啟kerberos

kerberos安裝看https://blog.csdn.net/qq_35315256/article/details/103678473

cm6.2配置sentry

根據提示一步一步進行,需要首先建立cloudera-scm/admin主體

1、添加sentry服務,根據提示一步一步添加完成

cm6.2配置sentry
重要:
如果在非安全群集中啟用了YARN Resource Manager HA,則在啟用Kerberos之前,必須清除ZooKeeper中的StateStore znode,如下所示:

轉到Cloudera Manager管理控制台首頁,單擊YARN服務右側的,然後選擇停止。
當您看到“ 完成”狀态時,該服務已停止。
轉到YARN服務,然後選擇“ 操作” >“ 格式化狀态存儲”。
指令完成後,單擊“ 關閉”。
           

2、修改配置

我就有以下基本的服務,沒有配置任何ha,也沒有zk,隻是為了配置sentry

cm6.2配置sentry

先配置hdfs

cm6.2配置sentry

hive外部表需要在hdfs建立如下圖目錄,權限需要修改為hive:hive,hive的外部資料全部存到這,位置可以随便寫 

cm6.2配置sentry

然後是hive

cm6.2配置sentry
cm6.2配置sentry
cm6.2配置sentry

然後是yarn

cm6.2配置sentry

這裡還需要設定一下最小送出使用者的id,預設是1000,修改一下限制為0

參數是:min.user.id

最後是sentry

cm6.2配置sentry

最後重新開機服務

cm6.2配置sentry

到此位置,hive認證鑒權配置完成,開始驗證

3、指令行配置hive權限

先介紹幾個kerberos的基本指令

kdestroy # 登出登入
kinit admin/admin # 登陸
klist # 檢視目前登陸使用者
           

kadmin.local 登陸本地資料庫

list_principals # 檢視存在的主體
addprinc test/test # 增加主體
           

3.1、增加sentry主體,是hive管理者

addprinc hive/hive # 作為管理者,必須是這個,我這裡沒有寫域名是因為我預設的就加了,在kerberos配置過 
           

beeline用戶端連接配接 

beeline -u "jdbc:hive2://node1:10000/;principal=hive/[email protected]"
           

是這樣的,linux使用者要和主體使用者對應,例如,linux使用者/使用者組 對應 主體admin/admin,如果配置hue,需要也和hue使用者對應.

3.1.1、給hive/hive超級管理者權限

cm6.2配置sentry
create role admin;
grant all on server server1 to role admin;
grant role admin to group hive;
           

3.2、連接配接成功開始表演

show roles # 檢視角色
           
cm6.2配置sentry

3.2.0、建立主體

addprinc reader/reader
addprinc writer/writer
           

3.2.1、建立角色

create role reader;
create role writer;
           

3.2.2、為role賦予privilege

grant select on database testdb to role reader;
grant insert on database testdb to role writer;
           

3.2.3、把role授予使用者組

grant role reader to group reader;
grant role writer to group writer;
           

3.2.4、測試

kdestroy # 登出之前使用者,當然也可以直接kinit
kinit reader/reader
klist # 檢視一下是不是reader使用者
# 然後beeline登陸
beeline -u "jdbc:hive2://node1:10000/;principal=hive/[email protected]"
# 然後測試就好了
           

3.2.5、sentry可以控制庫、表、甚至表的列。

還有簡單配置的方法就是在hue中配置,網上有很多教程,可以檢視一下

Sentry不支援Hive cli列權限管理,建議禁用Hive cli。也不支援SparkSql列權限管理

4、測試,本人實測

4.1、删除角色

drop role role_name; # 删除角色
           

4.2、把stu表的name列權限授予角色writer

grant select(name) on table test.stu to role writer;
# 這裡的表前面也寫上庫,要不然預設是default庫
# 查詢的時候,寫上有權限的列
           

4.3、檢視writer角色在資料庫test中的權限

show  grant role writer on database test;
           

4.4、檢視writer角色在表stu中的權限

show grant role writer on table test.stu;
           

4.5、把role賦予使用者reader

GRANT ROLE reader TO USER reader;
           

Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Sentry does not allow privileges to be granted/revoked to/from: USER (state=08S01,code=1)

我的是cdh6.2 可能已經不支援授予給user了

4.6、把role賦予使用者組reader

GRANT ROLE reader TO group reader;
           

4.7、檢視使用者、使用者組下的權限

SHOW ROLE GRANT USER reader;
SHOW ROLE GRANT group reader;
           

4.8、查詢某個role下的權限

SHOW GRANT ROLE writer;
           

4.9.1、回收某個角色對資料庫的select權限

REVOKE SELECT ON DATABASE db_name FROM ROLE role_name;
           

4.9.2、回收writer角色對stu這張表id這個列的select權限

revoke select(id) on test.stu  from role writer;  
           

4.9.3、回收writer組下的writer角色

revoke role writer FROM group writer;
# 文法
REVOKE ROLE role_name [, role_name]  FROM GROUP (groupName) [,GROUP (groupName)
           

5、常見問題

1、 

Requested user deng_yb is not whitelisted and has id 501,whichis below the minimum allowed 1000
           

那是因為Yarn限制了使用者id小于1000的使用者送出作業;

cm6.2配置sentry

2、hdfs送出mr任務

Diagnostics: Application application_1528344974377_0009 initialization failed (exitCode=255) with output: main : command provided 0
main : run as user is hdfs
main : requested yarn user is hdfs
Requested user hdfs is banned
           
cm6.2配置sentry