基于cloudera-manager6.2部署sentry
系統:centos 6.8
因為我是本地電腦開的幾個虛拟機,為了減少記憶體,我把監控服務停了,報黃都可以忽略,伺服器上都是正常綠色的。
首先開啟kerberos
kerberos安裝看https://blog.csdn.net/qq_35315256/article/details/103678473
根據提示一步一步進行,需要首先建立cloudera-scm/admin主體
1、添加sentry服務,根據提示一步一步添加完成
重要:
如果在非安全群集中啟用了YARN Resource Manager HA,則在啟用Kerberos之前,必須清除ZooKeeper中的StateStore znode,如下所示:
轉到Cloudera Manager管理控制台首頁,單擊YARN服務右側的,然後選擇停止。
當您看到“ 完成”狀态時,該服務已停止。
轉到YARN服務,然後選擇“ 操作” >“ 格式化狀态存儲”。
指令完成後,單擊“ 關閉”。
2、修改配置
我就有以下基本的服務,沒有配置任何ha,也沒有zk,隻是為了配置sentry
先配置hdfs
hive外部表需要在hdfs建立如下圖目錄,權限需要修改為hive:hive,hive的外部資料全部存到這,位置可以随便寫
然後是hive
然後是yarn
這裡還需要設定一下最小送出使用者的id,預設是1000,修改一下限制為0
參數是:min.user.id
最後是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超級管理者權限
create role admin;
grant all on server server1 to role admin;
grant role admin to group hive;
3.2、連接配接成功開始表演
show roles # 檢視角色
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的使用者送出作業;
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