Doris:聯邦認證

LDAP?

接入第三方 LDAP 服務為 Doris 提供驗證登錄和組授權服務。

LDAP 驗證登錄?

LDAP 驗證登錄指的是接入 LDAP 服務的密碼驗證來補充 Doris 的驗證登錄。Doris 優先使用 LDAP 驗證用戶密碼,如果 LDAP 服務中不存在該用戶則繼續使用 Doris 驗證密碼,如果 LDAP 密碼正確但是 Doris 中沒有對應賬戶則創建臨時用戶登錄 Doris。

開啟 LDAP 后,用戶在 Doris 和 LDAP 中存在以下幾種情況:

LDAP 用戶Doris 用戶密碼登錄情況登錄 Doris 的用戶
存在存在LDAP 密碼登錄成功Doris 用戶
存在存在Doris 密碼登錄失敗
不存在存在Doris 密碼登錄成功Doris 用戶
存在不存在LDAP 密碼登錄成功Ldap 臨時用戶

開啟 LDAP 后,用戶使用 mysql client 登錄時,Doris 會先通過 LDAP 服務驗證用戶密碼,如果 LDAP 存在用戶且密碼正確,Doris 則使用該用戶登錄;此時 Doris 若存在對應賬戶則直接登錄該賬戶,如果不存在對應賬戶則為用戶創建臨時賬戶并登錄該賬戶。臨時賬戶具有具有相應對權限(參見 LDAP 組授權),僅對當前連接有效,doris 不會創建該用戶,也不會產生創建用戶對元數據。 如果 LDAP 服務中不存在登錄用戶,則使用 Doris 進行密碼認證。

以下假設已開啟 LDAP 認證,配置 ldap_user_filter = (&(uid={login})),且其他配置項都正確,客戶端設置環境變量 LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1

例如:

  1. Doris 和 LDAP 中都存在賬戶:

    存在 Doris 賬戶:jack@'172.10.1.10',密碼:123456

    LDAP 用戶節點存在屬性:uid: jack?用戶密碼:abcdef

    使用以下命令登錄 Doris 可以登錄?jack@'172.10.1.10'?賬戶:

    mysql -hDoris_HOST -PDoris_PORT -ujack -p abcdef
    

    使用以下命令將登錄失敗:

    mysql -hDoris_HOST -PDoris_PORT -ujack -p 123456
    

  2. LDAP 中存在用戶,Doris 中不存在對應賬戶:

    LDAP 用戶節點存在屬性:uid: jack?用戶密碼:abcdef

    使用以下命令創建臨時用戶并登錄 jack@'%',臨時用戶具有基本權限 DatabasePrivs:Select_priv,用戶退出登錄后 Doris 將刪除該臨時用戶:

    mysql -hDoris_HOST -PDoris_PORT -ujack -p abcdef
    

  3. LDAP 不存在用戶:

    存在 Doris 賬戶:jack@'172.10.1.10',密碼:123456

    使用 Doris 密碼登錄賬戶,成功:

    mysql -hDoris_HOST -PDoris_PORT -ujack -p 123456
    

LDAP 組授權?

DLAP 用戶 dn 是 LDAP 組節點的“member”屬性則 Doris 認為用戶屬于該組。LDAP 組授權是將 LDAP 中的 group 映射到 Doris 中的 role,并將所有對應的 role 權限授予登錄用戶,用戶退出登錄后 Doris 會撤銷對應的 role 權限。在使用 LDAP 組授權前應該在 Doris 中創建相應的 role,并為 role 授權。

登錄用戶權限跟 Doris 用戶和組權限有關,見下表:

LDAP 用戶Doris 用戶登錄用戶的權限
存在存在LDAP 組權限 + Doris 用戶權限
不存在存在Doris 用戶權限
存在不存在LDAP 組權限

如果登錄的用戶為臨時用戶,且不存在組權限,則該用戶默認具有 information_schema 的 select_priv 權限

舉例:

LDAP 用戶 dn 是 LDAP 組節點的?member?屬性則認為用戶屬于該組,Doris 會截取組 dn 的第一個 Rdn 作為組名。

例如用戶 dn 為?uid=jack,ou=aidp,dc=domain,dc=com,組信息如下:

dn: cn=doris_rd,ou=group,dc=domain,dc=com  
objectClass: groupOfNames  
member: uid=jack,ou=aidp,dc=domain,dc=com  

則組名為?doris_rd

假如 jack 還屬于 LDAP 組?doris_qadoris_pm;Doris 存在 role:doris_rddoris_qadoris_pm,在使用 LDAP 驗證登錄后,用戶不但具有該賬戶原有的權限,還將獲得 role?doris_rddoris_qa?和?doris_pm?的權限。

注意:

user 屬于哪個 group 和 LDAP 樹的組織結構無關,示例部分的 user2 并不一定屬于 group2 若想讓 user2 屬于 group2,需要在 group2 的 member 屬性中添加 user2

LDAP 示例?

更改 Doris 配置?
  1. 在 fe/conf/fe.conf 文件中配置認證方式為 ldap authentication_type=ldap。
  2. 在 fe/conf/ldap.conf 文件中配置 LDAP 基本信息,
  3. 設置 LDAP 管理員密碼:配置好 ldap.conf 文件后啟動 fe,使用 root 或 admin 賬號登錄 Doris,執行 sql
set ldap_admin_password = password('ldap_admin_password');

使用 mysql 客戶端登錄?
mysql -hDORIS_HOST -PDORIS_PORT -u user -p --enable-cleartext-plugin
輸入 ldap 密碼

注:使用其它客戶端登錄可以參考下文中 客戶端如何使用明文登錄

LDAP 信息緩存?

為了避免頻繁訪問 LDAP 服務,Doris 會將 LDAP 信息緩存到內存中,可以通過 ldap.conf 中的 ldap_user_cache_timeout_s 配置項指定 LDAP 用戶的緩存時間,默認為 12 小時;在修改了 LDAP 服務中的信息或者修改了 Doris 中 LDAP 用戶組對應的 Role 權限后,可能因為緩存而沒有及時生效,可以通過 refresh ldap 語句刷新緩存,詳細查看REFRESH-LDAP。

LDAP 驗證的局限?

  • 目前 Doris 的 LDAP 功能只支持明文密碼驗證,即用戶登錄時,密碼在 client 與 fe 之間、fe 與 LDAP 服務之間以明文的形式傳輸。

常見問題?

  • 怎么判斷 LDAP 用戶在 doris 中有哪些角色?

    使用 LDAP 用戶在 doris 中登錄,show grants;能查看當前用戶有哪些角色。其中 ldapDefaultRole 是每個 ldap 用戶在 doris 中都有的默認角色。

  • LDAP 用戶在 doris 中的角色比預期少怎么排查?

    1. 通過show roles;查看預期的角色在 doris 中是否存在,如果不存在,需要通過?CREATE ROLE rol_name;創建角色。
    2. 檢查預期的 group 是否在ldap_group_basedn對應的組織結構下。
    3. 檢查預期 group 是否包含 member 屬性。
    4. 檢查預期 group 的 member 屬性是否包含當前用戶。

LDAP 相關概念?

在 LDAP 中,數據是按照樹型結構組織的。

示例(下文的介紹都將根據這個例子進行展開)?
- dc=example,dc=com- ou = ou1- cn = group1- cn = user1- ou = ou2- cn = group2- cn = user2- cn = user3

LDAP 名詞解釋?
  • dc(Domain Component): 可以理解為一個組織的域名,作為樹的根結點
  • dn(Distinguished Name): 相當于唯一名稱,例如 user1 的 dn 為 cn=user1,ou=ou1,dc=example,dc=com user2 的 dn 為 cn=user2,cn=group2,ou=ou2,dc=example,dc=com
  • rdn(Relative Distinguished Name): dn 的一部分,user1 的四個 rdn 為 cn=user1 ou=ou1 dc=example 和 dc=com
  • ou(Organization Unit): 可以理解為子組織,user 可以放在 ou 中,也可以直接放在 example.com 域中
  • cn(common name):名字
  • group: 組,可以理解為 doris 的角色
  • user: 用戶,和 doris 的用戶等價
  • objectClass:可以理解為每行數據的類型,比如怎么區分 group1 是 group 還是 user,每種類型的數據下面要求有不同的屬性,比如 group 要求有 cn 和 member(user 列表),user 要求有 cn,password,uid 等

客戶端如何使用明文登錄?

MySql Client?

客戶端使用 LDAP 驗證需要啟用 mysql 客戶端明文驗證插件,使用命令行登錄 Doris 可以使用下面兩種方式之一啟用 mysql 明文驗證插件:

  • 設置環境變量?LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN?值 1

    例如在 linux 或者 mac 環境中可以使用:

    echo "export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1" >> ~/.bash_profile && source ~/.bash_profile
    

  • 每次登錄 Doris 時添加參數?--enable-cleartext-plugin

    mysql -hDORIS_HOST -PDORIS_PORT -u user -p --enable-cleartext-plugin輸入 ldap 密碼
    

Jdbc Client?

使用 Jdbc Client 登錄 Doris 時,需要自定義 plugin。

首先,創建一個名為 MysqlClearPasswordPluginWithoutSSL 的類,繼承自 MysqlClearPasswordPlugin。在該類中,重寫 requiresConfidentiality() 方法,并返回 false。

public class MysqlClearPasswordPluginWithoutSSL extends MysqlClearPasswordPlugin {
@Override  
public boolean requiresConfidentiality() {return false;}
}

在獲取數據庫連接時,需要將自定義的 plugin 配置到屬性中

即(xxx 為自定義類的包名)

  • authenticationPlugins=xxx.xxx.xxx.MysqlClearPasswordPluginWithoutSSL
  • defaultAuthenticationPlugin=xxx.xxx.xxx.MysqlClearPasswordPluginWithoutSSL
  • disabledAuthenticationPlugins=com.mysql.jdbc.authentication.MysqlClearPasswordPlugin

eg:

 jdbcUrl = "jdbc:mysql://localhost:9030/mydatabase?authenticationPlugins=xxx.xxx.xxx.MysqlClearPasswordPluginWithoutSSL&defaultAuthenticationPlugin=xxx.xxx.xxx.MysqlClearPasswordPluginWithoutSSL&disabledAuthenticationPlugins=com.mysql.jdbc.authentication.MysqlClearPasswordPlugin";

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73783.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

stm32第六天繼電器

一:繼電器 1.繼電器的工作原理 繼電器是一個電控開關,工作原理基于電磁感應,繼電器包括一個電磁線圈和一組觸點。常用于控制高電流或高電壓的電路,例如自動控制原理,電力系統和自動化設備中,由于可靠性和電…

Vue渲染函數 - render 函數

文章目錄 Vue渲染函數 - render 函數1. 什么是 render 函數2、頁面展示過程3、render 函數的參數4. 如何使用(1)基本渲染(2)傳遞屬性和事件(3)條件渲染 5. render 函數的實際使用6.View Design 組件中的使用…

單片機自學總結

自從工作以來,一直努力耕耘單片機,至今,頗有收獲。從51單片機,PIC單片機,直到STM32,以及RTOS和Linux,幾乎天天在搞:51單片機,STM8S207單片機,PY32F003單片機,…

go回調函數的使用

在Go語言中,回調函數可以有參數,也可以沒有參數。它們的定義和使用方式略有不同,但本質上都是將函數作為參數傳遞給另一個函數,并在適當的時候調用它。以下是帶參數和不帶參數的回調函數的示例和說明。 1. 不帶參數的回調函數 不…

在 Ubuntu 中配置 NFS 共享服務的完整指南

前言 網絡文件系統(NFS)作為 Linux 系統間實現文件共享的標準協議,在分布式計算和容器化部署場景中具有重要作用。本文將詳細演示如何在 Ubuntu 系統上配置 NFS 服務端與客戶端,并實現可靠的持久化掛載。 一、環境準備 系統要求…

TypeScript Symbols 深度解析:在 Vue3 中的高級應用實踐

一、Symbols 核心特性解析 1.1 什么是 Symbol? Symbol 是 ES6 引入的原始數據類型,表示唯一且不可變的值,主要解決對象屬性名沖突問題。在 TypeScript 中,我們通過 symbol 類型獲得完整的類型支持: const SERIAL_KE…

無需刷機、root,暢享原生安卓的絲滑體驗。

Apex Launcher 是一款歷史悠久的 Android 桌面啟動器,誕生于 Android 系統早期(Android 4.0 時代)。當時,Android 系統的默認界面被認為較為簡陋,無法滿足一些追求個性化和高效操作的用戶需求。因此,許多開…

Visual Studio Code安裝配置優化全攻略:打造高效開發環境

目錄 一、背景與意義 二、安裝與配置基礎 2.1 下載與安裝 2.2 核心配置目錄 三、深度優化配置指南 3.1 主題與界面優化 3.2 必裝效率插件(精選TOP10) 3.3 性能優化設置 四、實戰案例:前端開發環境配置 4.1 項目初始化 4.2 調試配置…

味覺傳送器E-Taste:開啟虛擬世界的味覺之門

味覺傳送器E-Taste:開啟虛擬世界的味覺之門 一、發明背景與動機 隨著虛擬現實(VR)和增強現實(AR)技術的飛速發展,人們在虛擬世界中的沉浸感不斷提升,視覺和聽覺體驗已經取得了顯著的突破。然而…

判斷質數與合數

判斷質數與合數的邏輯很相似,都是判斷一個屬除了1和它本身,能不能被其他數整除。 其他數包括質數與合數,合數能表示能質數的乘積,因此問題就轉化為:一個數能不能被除了1和它本身之外的其他質數整除。 質數2&#xff…

在Spring Boot項目中接入DeepSeek深度求索,感覺笨笨的呢

文章目錄 引言1. 什么是DeepSeek?2. 準備工作2.1 注冊DeepSeek賬號 3.實戰演示3.1 application增加DS配置3.2 編寫service3.3 編寫controller3.4 編寫前端界面chat.html3.5 測試 總結 引言 在當今快速發展的數據驅動時代,企業越來越重視數據的價值。為了…

Cursor在內網環境配置自定義DeepSeek API

關鍵字 Cursor、DeepSeek、API配置、內網代理、HTTP/2 背景環境 使用Cursor集成環境開發程序。但是我使用公司的內網并不能使用cursor自帶的模型,于是我就想使用DeepSeek官方的API服務。 環境:Windows 11系統 解決過程 網絡檢測 首先進行環境檢測&am…

RabbitMQ 集群降配

這里寫自定義目錄標題 摘要檢查狀態1. 檢查 RabbitMQ 服務狀態2. 檢查 RabbitMQ 端口監聽3. 檢查 RabbitMQ 管理插件是否啟用4. 檢查開機自啟狀態5. 確認集群高可用性6. 檢查使用該集群的服務是否做了斷開重連 實操1. 負載均衡配置2. 逐個節點降配(滾動操作&#xf…

設計模式之外觀模式:原理、實現與應用

引言 外觀模式(Facade Pattern)是一種結構型設計模式,它通過提供一個統一的接口來簡化復雜系統的使用。外觀模式隱藏了系統的復雜性,使得客戶端可以通過一個簡單的接口與系統交互。本文將深入探討外觀模式的原理、實現方式以及實…

進行交通流預測,使用KAN+Transformer模型

理論基礎 KAN(Knowledge Augmented Network) KAN 是一種知識增強網絡,其核心思想是將先驗知識融入到神經網絡中,以此提升模型的性能與泛化能力。在交通流預測領域,先驗知識可以是交通規則、歷史交通模式等。通過把這…

TF中 Arg 節點

TF中 Arg 節點 在 TensorFlow 的計算圖中,_Arg 節點(Argument Node)表示函數的輸入參數,是計算圖中負責接收外部輸入數據的節點。它的名字來源于“Argument”(參數),直接對應函數調用時傳入的張…

Educational Codeforces Round 176 (Rated for Div. 2)

A.To Zero 簽到題 void solve() { int n,k;cin>>n>>k;int k2k/2*2;int k1(k2<k)?k:k-1;int cnt0;if(n%21){n-k1;cnt;cnt(n/k2)(n%k2!0);}else {cnt(n/k2)(n%k2!0);}cout<<cnt<<endl;}B.Array Recoloring 手推一下可以發現&#xff0c;答案其實就…

Kubernetes的Service詳解

一、Service介紹 在 kubernetes 中&#xff0c; pod 是應用程序的載體&#xff0c;我們可以通過 pod 的 ip 來訪問應用程序&#xff0c;但是 pod 的 ip 地址不是固定的&#xff0c;這也就意味著不方便直接采用pod 的 ip 對服務進行訪問。 為了解決這個問題&#xff0c;kuberne…

基于Nvidia Jetson Nano邊緣計算設備使用TensorRT部署YOLOv8模型實現目標檢測推理

0、背景 最近拿到一臺邊緣計算設備&#xff0c;在部署YOLO模型的過程中遇到一些問題&#xff0c;特此記錄。 設備介紹信息&#xff1a;NVIDIA Jetson Orin Nano T201Developer Kit 開發套件 開發者套件&#xff1a;Jetson Orin Nano T201 8GB開發套件 使用指南文檔&#x…

讓人感到疑惑的const

const 關鍵字在不同的編程語言中有著不同的含義和限制&#xff0c;但通常它被用來聲明一個常量或只讀變量。然而&#xff0c;在 JavaScript 中&#xff0c;const 的行為有時可能會讓人感到困惑&#xff0c;因為它并不總是意味著“不可變”&#xff08;immutable&#xff09;。讓…