cdh5.7許可權測試示例

来源:http://www.cnblogs.com/royfans/archive/2017/08/07/7299490.html
-Advertisement-
Play Games

本文旨在展示CDH基於Kerberos身份認證和基於Sentry的許可權控制功能的測試示例。 1. 準備測試數據 1 2 3 4 5 6 cat /tmp/events.csv 10.1.2.3,US,android,createNote 10.200.88.99,FR,windows,updateN ...


本文旨在展示CDH基於Kerberos身份認證和基於Sentry的許可權控制功能的測試示例。

1. 準備測試數據

1 2 3 4 5 6 cat /tmp/events.csv 10.1.2.3,US,android,createNote 10.200.88.99,FR,windows,updateNote 10.1.2.3,US,android,updateNote 10.200.88.77,FR,ios,createNote 10.1.4.5,US,windows,updateTag


2. 創建用戶
2.1. 創建系統用戶
在集群所有節點創建系統用戶並設置密碼

1 2 3 4 5 6 useradd user1 passwd user1 useradd user2 passwd user2 useradd user3 passwd user3


2.2. 創建kerberos用戶

1 2 3 kadmin.local -q "addprinc user1" kadmin.local -q "addprinc user2" kadmin.local -q "addprinc user3"


3. 創建資料庫和表
3.1. 創建資料庫
admin為sentry的超級管理員,該用戶配置許可權時已設置

1 kinit admin

通過beeline連接 hiveserver2,運行下麵命令創建hive庫的超級管理員角色, 並將該角色賦予admin組,使admin有操作hive庫的權力

1 2 3 4 beeline -u "jdbc:hive2://vmw208:10000/;principal=hive/[email protected]" create role admin_role; GRANT ALL ON SERVER server1 TO ROLE admin_role; GRANT ROLE admin_role TO GROUP admin;


創建兩個測試資料庫

1 2 create database db1; create database db2;

3.2. 創建表
在兩個測試資料庫中各創建一張測試表,並導入測試數據

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 create table db1.table1 ( ip STRING, country STRING, client STRING, action STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';   create table db2.table1 ( ip STRING, country STRING, client STRING, action STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; create table db2.table2 ( ip STRING, country STRING, client STRING, action STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';     load data local inpath '/home/iie/events.csv' overwrite into table db1.table1; load data local inpath '/home/iie/events.csv' overwrite into table db2.table1; load data local inpath '/home/iie/events.csv' overwrite into table db2.table2;

  

4. 賦予用戶許可權
4.1. 給user1賦予db1的所有許可權

1 2 3 create role user1_role; GRANT ALL ON DATABASE db1 TO ROLE user1_role; GRANT ROLE user1_role TO GROUP user1;


4.2. 給user2賦予db2的所有許可權

1 2 3 create role user2_role; GRANT ALL ON DATABASE db2 TO ROLE user2_role; GRANT ROLE user2_role TO GROUP user2;


4.3. 給user3賦予db2.table1的所有許可權

1 2 3 4 create role user3_role; use db2; GRANT select ON table table1 TO ROLE user3_role; GRANT ROLE user3_role TO GROUP user3;

5. 測試用戶許可權
5.1. Hive測試
5.1.1. admin用戶擁有整個hive庫的許可權

1 2 3 4 5 6 7 8 9 10 11 12 13 kinit admin beeline -u "jdbc:hive2://vmw208:10000/;principal=hive/[email protected]" show databases; 5.1.2.  user1用戶只具有db1和default的許可權 kinit user1 beeline -u "jdbc:hive2://vmw208:10000/;principal=hive/[email protected]" 0: jdbc:hive2://vmw208:10000/> show databases; +----------------+--+ | database_name | +----------------+--+ | db1 | default | +----------------+--+


5.1.3. user2用戶只具有db2和default的許可權

1 2 3 4 5 6 7 8 9 kinit user2 beeline -u "jdbc:hive2://vmw208:10000/;principal=hive/[email protected]" 0: jdbc:hive2://vmw208:10000/> show databases; +----------------+--+ | database_name | +----------------+--+ | db2 | default | +----------------+--+


5.1.4. user3用戶只具有db2.table1和default的許可權

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 kinit user2 beeline -u "jdbc:hive2://vmw208:10000/;principal=hive/[email protected]" 0: jdbc:hive2://vmw208:10000/> show databases; +----------------+--+ | database_name | +----------------+--+ | db2 | default | +----------------+--+ 0: jdbc:hive2://node0a17:10000/> use db2; 0: jdbc:hive2://node0a17:10000/> show tables; INFO : OK +-----------+--+ | tab_name | +-----------+--+ | table1 | +-----------+--+


5.2. Hdfs測試
配置hdfs acl與sentry同步後,hdfs許可權與sentry監控的目錄(/user/hive/warehouse)的許可權同步
5.2.1. 切換到hive用戶,查看hive庫文件的許可權
設置hdfs acl與sentry同步後,sentry監控的hive庫的許可權改動會同步到對應的hdfs文件許可權

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 [root@vmw208 home]# kinit hive [root@vmw208 home]# hdfs dfs -getfacl -R /user/hive/warehouse/ # file: /user/hive/warehouse # owner: hive # group: hive user::rwx user:hive:rwx group::--- group:hive:rwx mask::rwx other::--x   # file: /user/hive/warehouse/db1.db # owner: hive # group: hive user::rwx user:hive:rwx group:user1:rwx group::--- group:hive:rwx mask::rwx other::--x   # file: /user/hive/warehouse/db1.db/table1 # owner: hive # group: hive user::rwx user:hive:rwx group:user1:rwx group::--- group:hive:rwx mask::rwx other::--x   # file: /user/hive/warehouse/db1.db/table1/events.csv # owner: hive # group: hive user::rwx user:hive:rwx group:user1:rwx group::--- group:hive:rwx mask::rwx other::--x   # file: /user/hive/warehouse/db2.db # owner: hive # group: hive user::rwx user:hive:rwx group:user2:rwx group::--- group:hive:rwx mask::rwx other::--x   # file: /user/hive/warehouse/db2.db/table1 # owner: hive # group: hive user::rwx user:hive:rwx group:user2:rwx group::--- group:hive:rwx mask::rwx other::--x   # file: /user/hive/warehouse/db2.db/table1/events.csv # owner: hive # group: hive user::rwx user:hive:rwx group:user2:rwx group::--- group:hive:rwx mask::rwx other::--x

  

5.2.2. 切換到user1用戶,查看hdfs文件

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@vmw208 home]# kinit user1 Password for user1@HADOOP.COM: [root@vmw208 home]# hdfs dfs -ls /user/hive/warehouse/db2.db ls: Permission denied: user=user1, access=READ_EXECUTE, inode="/user/hive/warehouse/db2.db":hive:hive:drwxrwx—x [root@vmw208 home]# hdfs dfs -cat /user/hive/warehouse/db2.db/table1/events.csv cat: Permission denied: user=user1, access=READ, inode="/user/hive/warehouse/db2.db/table1/events.csv":hive:hive:-rwxrwx--x   [root@vmw208 home]# hdfs dfs -ls /user/hive/warehouse/db1.db Found 1 items drwxrwx--x+ - hive hive 0 2016-09-29 16:54 /user/hive/warehouse/db1.db/table1 [root@vmw208 home]# hdfs dfs -cat /user/hive/warehouse/db1.db/table1/events.csv 10.1.2.3,US,android,createNote 10.200.88.99,FR,windows,updateNote 10.1.2.3,US,android,updateNote 10.200.88.77,FR,ios,createNote 10.1.4.5,US,windows,updateTag

  

5.2.3. 切換到user2用戶,查看hdfs文件

1 2 3 4 5 6 7 8 9 10 [root@vmw208 home]# kinit user2 Password for user2@HADOOP.COM: [root@vmw208 home]# hdfs dfs -cat /user/hive/warehouse/db1.db/table1/events.csv cat: Permission denied: user=user2, access=READ, inode="/user/hive/warehouse/db1.db/table1/events.csv":hive:hive:-rwxrwx--x [root@vmw208 home]# hdfs dfs -cat /user/hive/warehouse/db2.db/table1/events.csv 10.1.2.3,US,android,createNote 10.200.88.99,FR,windows,updateNote 10.1.2.3,US,android,updateNote 10.200.88.77,FR,ios,createNote 10.1.4.5,US,windows,updateTag  

5.3. Spark測試
5.3.1. Spark讀hive表數據並列印到控制台
(1) 切換到user1用戶測試

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@vmw209 xdf]# kinit user1 Password for user1@HADOOP.COM: [root@vmw209 xdf]# spark-submit --class iie.hadoop.permission.QueryTable --master local /home/xdf/spark.jar db2 table1 …… Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=user1, access=READ_EXECUTE, inode="/user/hive/warehouse/db2.db/table1":hive:hive:drwxrwx—x [root@vmw209 xdf]# spark-submit --class iie.hadoop.permission.QueryTable --master local /home/xdf/spark.jar db1 table1 …… +------------+-------+-------+----------+ | ip|country| client| action| +------------+-------+-------+----------+ 10.1.2.3| US|android|createNote| |10.200.88.99| FR|windows|updateNote| 10.1.2.3| US|android|updateNote| |10.200.88.77| FR| ios|createNote| 10.1.4.5| US|windows| updateTag| +------------+-------+-------+----------+

  

(2) 切換到user2用戶測試

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@vmw209 xdf]# kinit user2 Password for user2@HADOOP.COM: [root@vmw209 xdf]# spark-submit --class iie.hadoop.permission.QueryTable --master local /home/xdf/spark.jar db1 table1 …… Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=user2, access=READ_EXECUTE, inode="/user/hive/warehouse/db1.db/table1":hive:hive:drwxrwx—x [root@vmw209 xdf]# spark-submit --class iie.hadoop.permission.QueryTable --master local /home/xdf/spark.jar db2 table1 …… +------------+-------+-------+----------+ | ip|country| client| action| +------------+-------+-------+----------+ 10.1.2.3| US|android|createNote| |10.200.88.99| FR|windows|updateNote| 10.1.2.3| US|android|updateNote| |10.200.88.77| FR| ios|createNote| 10.1.4.5| US|windows| updateTag| +------------+-------+-------+----------+

 

5.3.2. Spark讀文件數據寫入hive表中
調用工具程式spark.jar讀本地文件/home/xdf/events.csv數據寫到db2.table2
切換到user2用戶測試

1 2 3 4 5 6 7 kinit user2 beeline -u "jdbc:hive2://vmw208:10000/;principal=hive/[email protected]" use db2; create table table2 ( ip STRING, country STRING, client STRING, action STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; [root@vmw209 xdf]# spark-submit --class iie.hadoop.permission.HCatWriterTest --master local /home/xdf/spark.jar /home/xdf/events.csv db2 table2

成功!
寫到db1.table1報錯,沒有許可權!

1 Exception in thread "main" org.apache.hive.hcatalog.common.HCatException : 2004 : HCatOutputFormat not initialized, setOutput has to be called. Cause : org.apache.hadoop.security.AccessControlException: Permission denied: user=user2, access=WRITE, inode="/user/hive/warehouse/db1.db/table1":hive:hive:drwxrwx--x

上面只是測試環境,因為kinit + 密碼的方式有時效限制,不適合在生產環境運行,幸好spark提供了相關的參數:

1 2 3 4 spark-submit …… --principal # 用戶對應的kerberos principle --keytab # 對應用戶principle生成的密鑰文件


spark的許可權管理通過對hdfs/hive的文件目錄設置許可權來管理,不同的用戶擁有不同的許可權,用戶在提交spark任務時,指定對應用戶的kerberos principle和keytab來實現許可權管理。任務提交命令如下:

1 spark-submit --class iie.hadoop.permission.QueryTable --master yarn-cluster --principal=user1@HADOOP.COM --keytab=/home/user1/user1.keytab /home/user1/spark.jar db1 table1

其中--principal 和--keytab與用戶一一對應

註意:spark-submit只有在yarn-cluster模式下,--principal 和--keytab才有效


5.4. Kafka測試
5.4.1. 認證
用戶kafka為kafka許可權控制的超級管理員

1 [root@node10 iie]#kinit -kt /home/iie/kafka.keytab kafka


5.4.2. 創建topic
創建topic1和topic2

1 2 [root@node10 iie]#kafka-topics --zookeeper node11:2181/kafka --create --topic topic1 --partitions 2 --replication-factor 1 [root@node10 iie]#kafka-topics --zookeeper node11:2181/kafka --create --topic topic2 --partitions 2 --replication-factor 1

5.4.3. 賦權
給user1用戶附topic1的讀寫許可權

1 2 [root@node10 iie]#kafka-acls --authorizer-properties zookeeper.connect=node11:2181/kafka --add --allow-principal User:user1 --allow-host node10  --producer --topic topic1 --group console-consumer-9175 [root@node10 iie]#kafka-acls --authorizer-properties zookeeper.connect=node11:2181/kafka --add --allow-principal User:user1 --allow-host node10  --consumer --topic topic1 --group console-consumer-9175

給user2用戶附topic2的讀寫許可權

1 2 [root@node10 iie]#kafka-acls --authorizer-properties zookeeper.connect=node11:2181/kafka --add --allow-principal User:user2 --allow-host node10  --producer --topic topic2 --group console-consumer-9175 [root@node10 iie]#kafka-acls --authorizer-properties zookeeper.connect=node11:2181/kafka --add --allow-principal User:user2 --allow-host node10  --consumer --topic topic2 --group console-consumer-9175

5.4.4. 查看許可權

1 2 3 4 5 6 7 [root@node10 iie]#kafka-acls --authorizer-properties zookeeper.connect=node11:2181/kafka --list Current ACLs for resource `Topic:topic1`: User:user1 has Allow permission for operations: Write from hosts: node10 User:user1 has Allow permission for operations: Read from hosts: node10 Current ACLs for resource `Topic:topic2`: User:user2 has Allow permission for operations: Read from hosts: node10 User:user2 has Allow permission for operations: Write from hosts: node10


5.4.5. 創建生產消費配置文件
創建consumer.properties

1 2 3 4 5 cat /etc/kafka/conf/consumer.properties security.protocol=SASL_PLAINTEXT sasl.mechanism=GSSAPI sasl.kerberos.service.name=kafka group.id=console-consumer-9175

創建producer.properties

1 2 3 4 cat /etc/kafka/conf/producer.properties security.protocol=SASL_PLAINTEXT sasl.mechanism=GSSAPI sasl.kerberos.service.name=kafka

5.4.6. 生產數據
命令行生產數據

1 2 3 4 [root@node10 iie]#kinit user1 [root@node10 iie]#kafka-console-producer --broker-list node12:9092 --topic topic1 --producer.config /etc/kafka/conf/producer.properties 123123 123123

5.4.7. 消費數據
命令行消費數據

1 2 3 4 [root@node10 iie]#kinit user1 [root@node10 iie]#kafka-console-consumer --bootstrap-server node12:
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 緣起:有個朋友問我分區表在58的應用,我回答不出來,在我印象中,百度、58都沒有聽說有分區表相關的應用,業內進行一些技術交流的時候也更多的是自己分庫分表,而不是使用分區表。於是去網上查了一下,並詢問了58到家的DBA專家,將自己收到的信息沉澱下來,share給大伙。 解決什麼問題? 回答:當mysq ...
  • 今天,所有MySQL從伺服器上的主從複製都被異常中斷了,登陸到其中一臺上執行show slave status\G,發現如下錯誤:--Last_Error: Error 'Operation DROP USER failed for 'guest'@'localhost'' on query. De ...
  • 1.資料庫 顧名思義,資料庫DB (DataBase)即指存放數據的倉庫,只不過該倉庫位於電腦的存儲設備上。通常,這些數據面向一個組織、部門或整個企業,它們是按照一定的數據組織模型存放在存儲器上的一組相關數據集合。例如學生成績管理系統中,學生的基本信息、學籍信息、成績信息等都是來自學生成績管理數據 ...
  • insert into 表名1 ( 欄位A ,欄位B ,欄位C) SELECT 欄位A ,欄位B ,欄位C FROM 表名2 (where條件看情況而定) ...
  • Oracle資料庫概述 Oracle資料庫llg具有良好的體繫結構、強大的數據處理能力、豐富實用的功能和許多創新的特性,並根據用戶對象需求的不同,設置了不同的版本.本章將對Oracle的產品結構和創新特性進行介紹.另外,在學習Oracle11g之前,我們首先回顧資料庫的一些基本概念和基礎知識,以及O ...
  • 閱讀目錄 CockroachDB是什麼 環境部署 實戰 性能測試 結語 一、CockroachDB是什麼 CockroachDB(https://www.cockroachlabs.com)是Google備受矚目的Spanner的開源模仿,承諾提供一種高存活性、強一致性,可橫向擴展的SQL資料庫。主 ...
  • 平時我都用Navicat for MySQL工具進行導入的,但今天碰到的一個.sql的文件太大了,超過了1G。用Navicat from MySQL 時執行了1個多小時,還報了許多錯誤出來(導入時設置略過錯誤,所以最終還是完成了)。我嘗試用別的方式進行導入。上網查了一個,原來MySQL自帶導入工作: ...
  • --用oracle系統許可權的賬號 登陸 -- 1.創建用戶 --2.賦予許可權 --3.創建目錄 dictionary create directory directory_name as 'D:\oracleEnv\Oracle\product\11.2.0\db\backup'; --路徑可以自己 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...