SQL Standard Based Hive Authorization(基於SQL標准的Hive授權)


 
Hive 0.13版本之前的授權現狀
 
Hive默認授權(Default Hive Authorization (Legacy Mode))
 
設計目的並不是為了防止惡意用戶訪問(操作)未經授權的數據;
 
幫助用戶避免一些意料之外的操作行為;
 
授權機制並不完善,在很多指令方面都沒有進行授權確認,比如授權指令Grant;
 
授權確認發生在Hive SQL語句的編譯階段;
 
允許用戶執行dfs指令、用戶自定義函數以及shell指令,這些特殊操作很有可能跳過客戶端的安全機制;
 
通過創建視圖,並為視圖進行授權(而不是為視圖所依賴的表授權),從而提供細粒度的訪問控制(僅可以訪問表中的某幾列)。
 
基於存儲的授權(Storage Based Authorization in the Metastore Server)
 
通常用於Metastore Server API的授權;
 
Hive 0.12.0版本之后開始支持;
 
雖然能夠保護Metastore中的元數據不被惡意用戶破壞,但是沒有提供細粒度的訪問控制(列級別、行級別)
 
基於SQL標准的Hive授權(SQL Standards Based Hive Authorization)
 
基於SQL標准的Hive授權為Hive授權提供了第三個選擇,它完全兼容SQL的授權模型,不會給現在的用戶帶來向后兼容的問題,因此被推薦使用。一旦用戶遷移到這種更加安全的授權機制后,默認的授權機制可以被遺棄掉。
 
基於SQL的授權模型可以和基於存儲的授權模型(Hive Metastore Server)結合使用。
 
和Hive的默認授權機制一樣,授權確認發生的SQL語句的編譯階段。
 
為了保證該授權模型起到安全作用,客戶端同樣需要安全保證,可以通過以下兩種方式做到:
(1)用戶訪問必須且僅可以通過HiveServer2;
(2)限制用戶代碼和非SQL指令被執行。
 
授權確認時是以提交SQL指令的用戶身份為依據的,但SQL指令是以Hive Server用戶身份(即Hive Server的進程用戶)被執行的,因此Hive Server用戶必須擁有相應目錄(文件)的權限(根據SQL指令的不同,所需權限也不同)。
 
盡可能與標准SQL保持一致,但具體實現時存在些許偏差。有一些是因為方便現有用戶進行遷移(授權相關),另一些是出於方便使用的目的。
 
在這種授權模型控制下,擁有權限使用Hive CLI、HDFS commands、Pig command line、'hadoop jar' 等工具(指令)的用戶被稱為特權用戶。在一個組織(團隊)內,僅僅一些需要執行ETL相關工作的團隊需要這些特殊權限,這些工具的訪問不經過HiveServer2,因此它們不受這種授權模型的控制。對於需要通過Hive CLI、Pig和MapReduce訪問Hive表的用戶,可以通過在Hive Metastore Server中啟用Storage Based Authorization來進行相應的權限控制;其它情況則可能需要結合Hadoop的安全機制進行。
 
大多數的用戶(使用SQL語句,並通過ODBC/JDBC訪問HiveServer2進行商業分析)是可以使用這種授權模型進行權限控制的。
 
Hive指令和語句的限制
 
當使用基於SQL標准的授權模型時,
 
dfs、add、delete、compile、reset被禁用;
transform clause被禁用。
 
改變Hive配置的指令集合被限制為僅某些用戶可以執行,可以通過hive.security.authorization.sqlstd.confwhitelist(hive-site.xml)進行配置。
 
添加或刪除函數、宏的權限被限制為僅具有admin角色的用戶可以執行。
 
為了用戶可以使用(自定義)函數,創建永久函數(create permanent functions)的功能被添加。擁有角色admin的用戶可以執行該指令添加函數,所有添加的函數可以被所有的用戶使用。
 
權限
 
SELECT:賦予讀取某個對象的權限;
 
INSERT:賦予添加數據至某個對象(表)的權限;
 
UPDATE:賦予在某個對象(表)上執行更新操作的權限;
 
DELETE:賦予在某個對象(表)上刪除數據的權限;
 
ALL:賦予在某個對象上的所有權限(被轉換成擁有上面四個權限)。
 
對象
 
權限被應用到表或者視圖上,上面所描述的權限不支持應用於數據庫上。
 
數據庫所有者被用來確認某些特殊操作的權限;
 
Hive允許用戶在SQL語句中使用URI,因此URI也是Hive的一種對象。上面所描述的權限不適用於URI對象。URI通常指向文件系統(HDFS)的一個文件或目錄,授權是基於用戶(提交SQL語句的用戶,SQL語句中包含URI對象)在文件或目錄上的權限進行的。
 
對象所有者
 
對於某些特殊操作,是否是該對象(表/視圖/數據庫)的對象所有者決定了是否有權限在該對象上執行這些特殊操作。
 
用戶創建表、視圖或者數據庫,該用戶即成為所創建表、視圖或者數據庫的所有者。對於表或者視圖來說,所有者擁有對它們進行操作的所有權限(SELECT、INSERT、UPDATE、DELETE)。
 
數據庫的所有者也可以是一個角色,可以通過“alter database”指令設置一個數據庫的所有者為一個角色。
 
用戶和角色
 
用戶和角色均可以被賦予權限。
 
用戶可以屬於一個或多個角色。
 
有兩個具有特殊意義的角色:public和admin。
 
所有用戶均屬於角色public,我們使用該角色並通過grant語句將權限賦予給其它用戶。
 
當用戶執行查詢或指令的時候,用戶被賦予的權限以及用戶的“當前角色(可以為多個)”的權限被確認。“當前角色”可以通過”show current roles”進行查看。默認情況下,“當前角色”即為用戶所屬的所有角色(角色admin除外),我們可以通過指令“set role”指定某個角色成為“當前角色”。
 
作為數據庫管理員的用戶通常被添加至角色admin。
 
具有角色admin的用戶可以執行額外的指令,如create role或者drop role。他們也有訪問對象的全部權限,即使他們並沒有被顯式授權。因為角色admin默認不屬於“當前角色”,一個屬於角色admin的用戶要想得到角色admin的權限,必須通過指令set role先將“當前角色”切換至角色admin。
 
用戶(角色)名稱
 
角色名稱大小寫不敏感。
 
用戶名稱大小寫敏感。
 
帶引號的標識符(Quoted Identifiers)
 
一般情況下不建議使用,忽略此小節。
 
角色管理指令
 
Create Role
 
CREATE ROLE role_name;
 
僅僅角色admin具有該權限。角色名稱ALL、DEFAULT和NONE被保留。
 
Drop Role
 
DROP ROLE role_name;
 
僅僅角色admin具有該權限。
 
Show Current Roles
 
SHOW CURRENT ROLES;
 
顯示用戶的“當前角色”列表。
 
判斷用戶權限時涉及兩個方面:
 
用戶是否被賦予相應權限;
用戶所屬角色(可能為多個)是否被賦予相應權限。
 
默認“當前角色”包含用戶所屬的所有角色,但角色admin除外,即使該用戶屬於角色admin。
 
所有用戶均可以執行該指令。
 
Set Role
 
SET ROLE (role_name|ALL);
 
如果role_name被指定,則角色role_name成為“當前角色”中的唯一角色。
 
如果指定role_name為ALL,則會刷新“當前角色”列表,用於用戶被賦予新的角色時使用。
 
如果用戶並不屬於role_name所代表的角色,則會導致一個錯誤。
 
Show Roles
 
SHOW ROLES;
 
列出當前存在的所有角色。
 
僅僅角色admin具有該權限。
 
Grant Role
 
GRANT role_name [, role_name] ...
TO principal_specification [, principal_specification] ...
[ WITH ADMIN OPTION ];
 
principal_specification
: USER user
| ROLE role
 
將一個或多個角色賦予給另一些角色或用戶。
 
如果指定“WITH ADMIN OPTION”,被賦予角色的用戶可以將相應的角色賦予給其它用戶或角色。
 
如果上面的Grant語句會導致角色循環,則執行會失敗。
 
Revoke Role
 
REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...
FROM principal_specification [, principal_specification] ... ;
 
principal_specification
: USER user
| ROLE role
 
從指定的用戶或角色中回收指定的角色。
 
Show Role Grant
 
SHOW ROLE GRANT (USER|ROLE) principal_name;
 
principal_name為用戶或角色名稱。
 
列出指定用戶或角色被賦予的角色列表。
 
所有用戶均可以執行該指令。
 
Show Principals
 
SHOW PRINCIPALS role_name;
 
列出屬於指定角色的所有角色和用戶。
 
僅僅角色admin具有該權限。
 
管理對象權限
 
Grant
 
GRANT
priv_type [, priv_type ] ...
ON table_or_view_name
TO principal_specification [, principal_specification] ...
[WITH GRANT OPTION];
 
Revoke
 
REVOKE [GRANT OPTION FOR]
priv_type [, priv_type ] ...
ON table_or_view_name
FROM principal_specification [, principal_specification] ... ;
 
principal_specification
: USER user
| ROLE role
 
priv_type
: INSERT | SELECT | UPDATE | DELETE | ALL
 
如果一個用戶被賦予某表/視圖的權限時曾指定“WITH GRANT OPTION”,則該用戶可以將得到的某表/視圖的權限賦予/回收給其它用戶或角色。
 
注意:回收權限時,CASCADE在當前版本中是不被支持的,即僅能回收指定用戶或角色的權限,通過這些用戶或角色賦予出去的權限則沒有被回收。
 
Show Grant
 
SHOW GRANT [principal_name] ON (ALL| ([TABLE] table_or_view_name)
 
principal_name為用戶或角色名稱。
 
 
附:Hive操作權限列表  

Codes

Y:  Privilege required.

Y + G:  Privilege "WITH GRANT OPTION" required.

Action Select Insert Update Delete Ownership Admin URI Privilege (RWX Permission + Ownership)
CREATE TABLE         Y (of database)   Y  (for create external table – the location)
DROP TABLE         Y    
DESCRIBE TABLE Y            
SHOW PARTITIONS Y            
ALTER TABLE LOCATION         Y   Y (for new location)
ALTER PARTITION LOCATION         Y   Y (for new partition location)
ALTER TABLE ADD PARTITION   Y         Y (for partition location)
ALTER TABLE DROP PARTITION       Y      
ALTER TABLE (all of them except the ones above)         Y    
TRUNCATE TABLE         Y    
CREATE VIEW Y + G            
ALTER VIEW PROPERTIES         Y    
ALTER VIEW RENAME         Y    
DROP VIEW PROPERTIES         Y    
DROP VIEW         Y    
ANALYZE TABLE Y Y          
SHOW COLUMNS Y            
SHOW TABLE STATUS Y            
SHOW TABLE PROPERTIES Y            
CREATE TABLE AS SELECT Y (of input)       Y (of database)    
CREATE INDEX         Y (of table)    
DROP INDEX         Y    
ALTER INDEX REBUILD         Y    
ALTER INDEX PROPERTIES         Y    
SELECT Y            
INSERT   Y   Y (for OVERWRITE)      
UPDATE     Y        
DELETE       Y      
LOAD   Y (output)   Y (output)     Y (input location)
SHOW CREATE TABLE Y+G            
CREATE FUNCTION           Y  
DROP FUNCTION           Y  
CREATE MACRO           Y  
DROP MACRO           Y  
MSCK (metastore check)           Y  
ALTER DATABASE           Y  
CREATE DATABASE             Y (if custom location specified)
EXPLAIN Y            
DROP DATABASE         Y    
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM