Sentry初識sql
Sentry是適用於Hadoop生態環境、基於角色的受權管理系統,能夠模塊化集成到HDFS、Hive、Impala。它是一個策略引擎,運行定義受權規則,以校驗用戶對數據模型的訪問請求。數據庫
受權粒度安全
Sentry數據訪問受權的實現依賴於受權對象和操做,受權對象定義要受受權規則約束的對象,能夠是服務器(server)、數據庫、表、視圖甚至是列;操做定義運行的操做粒度,包括查找(select)、刪除(delete)、建立(create)等。受權對象和操做級別的組合模式提供了不一樣特權級別的訪問控制。服務器
在某些場景下,管理員可使用視圖的方式限制對行或列的訪問,能必定程度上減小權限設置的工做量。併發
Roledom
角色是一個權限集合,定義受權規則的基本單位。角色的概念容許將多個受權規則集合到一塊兒,而後再把權限相同的用戶分到一個角色裏,很方便後續權限管理維護。好比不一樣業務的人員訪問不一樣的業務表,能夠建多個角色,再給角色賦予相對應的業務表訪問權限,若是這類用戶要修改權限,只需對角色進行權限更改。模塊化
Groupoop
組是一個用戶集合,默認狀況下Sentry使用Hadoop中配置的組映射機制(好比使用OS的用戶組),Sentry使用Hadoop配置的組映射機制,以確保Sentry看到組映射和Hadoop生態系統中其餘組件看到的相同。把一個Group加到多個Role裏,這樣就給用戶分配到了權限,能夠將多個用戶分到一個組裏。組的概念進一步下降了權限管理的複雜度。測試
受權通常操做加密
一、建立角色
二、給角色賦權限
三、用戶所屬組加入到受權實體(角色)
Sentry與Hive、Impala、Hue集成
Hive、Impala等集成Sentry後能夠提升數據訪問的安全性、限制用戶訪問特定資源。
若是Hadoop集羣是用Cloudera Manager管理的,安裝Sentry就特別簡便,在cm上next、next就能夠了,安裝後和Hive、Impala、Hue的集成也很簡單,只須要在對應的組件配置界面上勾選上sentry就能夠了,好比:
若是Hive集成了Sentry,會強制啓用數據庫中的存儲通知設置,開啓這個配置後,對一個表進行大併發DDL操做(好比刪除分區、增長分區等)時可能致使Hive Metastore超時。
經過hive管理Sentry:hive和Sentry集成後,可在beeline經過命令管理Sentry權限,須要注意的是Hive Cli不支持Sentry管理。賦權用GRANT語句,權限回收用REVOKE語句。如前所述,權限對象包括服務(SERVER)、數據庫(DATABASE)、表(TABLE),權限操做包括:ALL、SELECT、UPDATE。
賦權例子:
建立角色:CREATE ROLE
組分配角色:GRANT ROLE TO GROUP
服務級賦權:GRANT ON SERVER TO ROLE
數據庫賦權:GRANT ON DATABASE TO ROLE
表賦權:GRANT ON . TO ROLE
權限回收例子:
回收數據庫權限:REVOKE ON DATABASE FROM ROLE
查看某個角色的權限:SHOW GRANT ROLE
Sentry集成到Hue的好處:在beeline管理sentry權限不夠值觀,要輸入命令,而Hue上是以圖形化實現等價操做,包括建立role、配置role的權限策略、給group分配role等。具體的在hue上的相關操做比較簡單,再也不贅述。
須要注意的是配置管理sentry權限的用戶,要有全部表的訪問權限,不然看到的數據庫、表不徹底。
Hadoop用戶、用戶組和Hue用戶、用戶組以及Sentry角色的關係:
如前所述,Sentry使用Hadoop用戶組策略,而Hadoop默認是OS用戶組,Hue和Sentry集成後,就要求用戶組同時在Hue和OS裏都要建立。
Hue權限初識
Hue權限整體上能夠分爲兩類:一類是功能權限、一類是數據權限。
功能權限是對Hue上一系列功能使用的受權,好比用戶登錄Hue、使用Hive引擎、使用Impala引擎以及管理用戶等功能性權限;數據權限的粒度是數據級別的,就是對數據庫、數據表的訪問權限,甚至是字段的訪問權限,數據權限控制用戶能看到哪些對象,對避免信息泄露、提升數據安全性是很是有用的。
管理Hue的功能權限相對較簡單,過程是先建立用戶、用戶組,建立後的用戶默認就有了登陸Hue的權限,而用戶組是基本的權限管理單位。把用戶分到用戶組,最後再給用戶組賦予特定的權限,這樣用戶就有了分配後的權限。一個企業通常都有統一的LDAP認證體系,Hue也能夠集成LDAP,這樣避免用戶建立、密碼管理等維護成本,下面會有相信闡述。
Hue沒有數據受權的功能,但能夠依賴Sentry實現,和Sentry的集成是這篇文章的主要內容,在談Sentry前先聊下Hue集成LDAP,這可以讓咱們從用戶管理這塊解脫出來。
Hue集成LDAP
如前所述,經過與LDAP集成,用戶可使用LDAP目錄中存儲的現有憑證登陸Hue,將 Hue與LDAP集成後,無需在Hue中獨立管理用戶信息。
下面演示集成步驟:
一、身份驗選擇證LDAP,啓用ldap身份驗證
二、並配置LDAP Server url。ldaps://開頭的url對用戶名、密碼以加密形式傳輸,ldap://是以明文形式傳輸
三、配置搜索綁定機制,設置search_bind_authentication以啓用搜索綁定;
查找用戶和組的搜索庫的專有名稱經過base_dn配置設置進行定義。
還有一種是使用直接綁定機制,使用直接綁定時,必須使用精確的nt_domain 或ldap_username_pattern進行身份驗證。使用直接綁定時,若是定義了 nt 域 (經過 nt_domain 配置設置進行定義) 屬性,則使用如下形式建立用戶可分辨名稱模板:@nt_domain。此模板用於從基本可分辨名稱開始,搜索全部目錄子樹。若是未配置 nt 域,則 Hue 搜索用戶的精確可分辨名稱模式 (經過 ldap_username_pattern 配置設置進行定義)。在這種狀況下,服務器從基本可分辨名稱開始,在全部目錄子樹中搜索匹配 ldap_username_pattern 值。
通常首選方法是搜索綁定,本文也是按照搜索綁定作的。
四、LDAP身份驗證首先綁定到服務器並創建鏈接。隨後,創建的鏈接用於任何後續查詢以搜索LDAP用戶信息。配置綁定到ldap服務的信息,bind_dn:定義綁定可分辨名稱 (或 DN) ;bind_password:配置設置綁定密碼
Sentry環境測試
1、Hive
JDBC訪問帶Sentry環境的Hive,測試不一樣用戶對hive數據的訪問權限,實現見下:
若是用戶沒有訪問權限,會報異常:
2、Impala
JDBC訪問帶Sentry環境的impala,須要注意的是鏈接的url,設置成AuthMech=3。
3、Spark SQL查詢Hive
hive引擎使用hadoop的mapReducer引擎作文件解析和查詢,spark使用的是本身的sql引擎作的解析,把每一個數據庫表當成一個RDD,直接操做底層HDFS。因此對於沒有集成Sentry的HDFS來講,實現代碼沒有任何差異。
4、Hive查Hbase
Hive提供了與HBase的集成,使得可以在HBase表上使用HQL語句進行查詢 插入操做以及進行Join和Union等複雜查詢。sentry一樣也能對hive查hbase的表進行權限設置,測試代碼同hive,再也不贅述。