開源分佈式中間件 DBLE Server.xml 配置解析

DBLE是基於開源項目MyCat發展的企業級開源分佈式中間件,適用於高併發及TB級海量數據處理場景;江湖人送外號 「MyCat Plus」;其簡單穩定,持續維護,良好的社區環境和廣大的羣衆基礎使DBLE獲得了社區的大力支持。git

DBLE項目介紹github

DBLE 官方項目:
https://github.com/actiontech...
如對源碼有興趣或者須要定製的功能的能夠經過源碼編譯安裝
DBLE 下載地址:
https://github.com/actiontech...
DBLE 官方社區交流羣:669663113

DBLE的主要配置文件算法

前兩篇文章"DBLE Rule.xml 配置解析"、"DBLE Schema.xml 配置解析" 分別介紹DBLE中Rule.xml和Schema.xml的配置,今天繼續介紹DBLE中Server.xml文件的配置,但願經過本篇的介紹,能對Server.xml文件的總體結構和內容有較爲清晰的認識,方便你們能快速地入門。sql

DBLE的配置文件都在conf目錄裏面,經常使用的幾個配置文件以下:後端

圖片描述

DBLE是一個JAVA分庫分表中間件,既然是JAVA應用確定會有JVM相關的配置,在DBLE中咱們選擇wrapper來做爲管理DBLE進程的工具,配置文件在conf/wrapper.conf中,關於JVM的詳細介紹在wrapp.conf。併發

Server.xml配置解析app

Server.xml是DBLE的重要配置文件之一, 總體配置能夠分爲三段,<system>段,<user>段和<firewall>段,分別定義了DBLE軟件的相關配置,用戶配置和針對用戶的權限控制功能。分佈式

<dble:server>
  <system></system>
  <user></user>
  <firewall>
  <whitehost></whitehost>
  </firewall>
</dble:server>

關於配置文件,若是在DBLE運行途中修改了配置,要想配置動態生效,只須要使用reload @@config命令,可是須要提醒的是reload @@config對Server.mxl中的<system>段中的內容沒法生效,即若是修改了server.xml的system的配置,須要從新啓動DBLE使其生效 ,更多關於DBLE管理命令請參考DBLE管理端命令高併發

一樣以思惟導圖的方式概括以下,其中個別參數配置只是粗略地將最重要的參數羅列出來,詳細的參數還請參考官方文檔。工具

圖片描述

system配置

DBLE經過Server.xml配置文件來定義相關管理行爲,如監聽端口,sql統計和控制鏈接行爲等功能,DBLE除了支持分庫分表功能外,還實現了相似MySQL的慢查詢日誌功能,而且支持使用pt-query-digest這樣的工具進行慢查詢SQL分析,極大地方便了DBA的SQL性能分析與問題SQL定位,如下簡單列出了一些最重要的也是最基礎的功能配置。

圖片描述

用戶配置

用戶配置在<user>段進行配置,由於在Schema.xml中容許多個schema的存在,所以業務用戶也是容許多個用戶同時存在,而且還能夠給這些用戶進行更小粒度的權限劃分。

以實際場景來舉例,好比當前配置了兩個邏輯庫adv和motor,分別是汽車和廣告業務,這兩個庫直接沒有任何的關聯,所以須要分別配置兩個用戶來使用這兩個schema,一個是adv_user,另外一個是motor_user,這兩個用戶登陸上去DBLE能看到只有本身的schema,其餘schema不可見,兩個用戶的配置以下:

<user name="adv_user">
        <property name="password">adv_user</property>
        <property name="schemas">adv</property>
        <property name="readOnly">false</property>
    </user>
    <user name="motor_user">
        <property name="password">motor_user</property>
        <property name="schemas">motor</property>
        <property name="readOnly">false</property>
    </user>

可是你可能會想萬一這兩個庫之中的表有關聯查詢呢?對應場景是:咱們須要有個用戶叫adv_motor_user,它對motor和adv庫都須要有權限訪問,別擔憂,DBLE提供了對單個用戶能夠訪問多個schema的配置方式,咱們能夠在schemas中指定多個schema,之間用逗號分隔,配置生效後使用這個用戶就能登陸看到兩個schema。

<user name="adv_motor_user">
  <property name="password">adv_motor_user</property>
  <property name="schemas">motor,adv</property> <!--多個邏輯庫之間使用逗號分隔,這些邏輯庫必須在Schema.xml中定義-->
  <property name="readOnly">false</property>  <!--用來作只讀用戶-->
 </user>

你可能還會想,這樣的權限粒度依然不夠細,咱們須要更細粒度的權限控制,好比須要adv_user的權限僅限於增刪改查權限,即須要將權限細分到dml語句, DBLE仍然提供這樣的配置,咱們能夠繼續增長privileges的配置,以下圖示:

<user name="adv_user">
        <property name="password">adv_user</property>
        <property name="schemas">adv</property>
        <property name="readOnly">false</property>
        <privileges check="true">
        <schema name="adv" dml="1110" >  <!-- 默認庫中全部邏輯表的繼承權限 -->
            <table name="tb01" dml="1111"></table>  <!-- 單獨指定表權限 -->
        </schema>
        </privileges>
</user>

privileges的check參數做用因而否對用戶權限進行檢查,默認是不檢查,dml的權限是分別是INSERT UPDATE SELECT DELETE四種權限,用4個數字0或1的組合來表示是否開啓, 1表示開啓,0表示關閉。

在上圖中, adv_user對adv庫中全部表的默認權限是'1110', 即只有insert, update和select權限, 即若是沒有像tb01那樣詳細地列出來的狀況,全部表的權限繼承權限1110,上面例子中,ta01做爲特殊指定的邏輯表的權限,adv_user對該表的權限是1111。

咱們能夠看到DBLE能夠將權限劃分到DML,而且是能夠精確到某一邏輯表級別,對於只須要DML權限的場景是足夠了,可是這種權限控制仍是很粗略,好比若是想讓adv_user除了有dml權限以外,還須要有drop table權限,這時候在用DBLE的privileges權限控制就顯得無能爲力了,所以可行的建議是:

  • 控制鏈接後端MySQL的用戶的權限,將DBLE側的權限徹底放開,
  • 換句話說只嚴格限制schema.xml的writehost中配置的鏈接用戶的權限。 使用後面要講的黑名單提供的權限控制。

黑白名單配置

針對上的權限粒度略顯粗略的限制(事實上大多數場景下DML的權限也已經足夠了),DBLE提供黑白名單的功能,白名單就是隻容許白名單的鏈接,而黑名單則是詳細的針對已經經過白名單的鏈接的權限控制,黑名單更相似於SQL審計, 黑名單配置以firewall分隔開來, 典型配置以下:

<firewall>
  <whitehost>
    <host host="127.0.0.1" user="adv_user"/>
    <host host="127.0.0.1" user="admin"/> 
  </whitehost>
  <blacklist check="true">
<property name="selelctAllow">false</property>  <!-- 容許select-->
<property name="insertAllow">false</property>  <!-- 容許insert-->
<property name="updateAllow">false</property>
......
  </blacklist>
</firewall>

對於黑白名單,須要注意:

  • DBLE針對來源IP和用戶名進行限制,放行白名單鏈接,對於不在白名單列之中的鏈接,通通拒絕而沒法登錄。白名單中的來源ip,只能指定固定IP, 暫不支持MySQL "%''相似的ip通配符。
    想象一種場景,須要像MySQL同樣指定一個ip範圍能容許鏈接DBLE,這時只能一行一行增長容許ip了,此處略顯笨拙。
  • 若是配置了黑名單,則再根據黑名單中的權限property來進一步限制白名單中的用戶權限,例如是否容許查詢,是否容許INSERT,是否容許UPDATE。能夠看出DBLE中黑名單更像是對用戶的權限審計,DBLE在黑名單中將上面只能粗糙地限制到DML權限的用戶配置作了較多較細的擴展,這樣權限粒度更小,從實際場景來講,這更符合生產須要,由此咱們能夠針對性地去掉一些危險的SQL。

總結

本文簡單介紹了Server.xml中的三個重要的配置段落,分別是DBLE的系統配置,用戶配置以及黑白名單功能,針對用戶配置則介紹了實際應用場景下的配置以及對應的DML權限配置,並詳細介紹了DBLE黑白名單配置實踐。

往期精選

| 社區投稿

DBLE和Mycat跨分片查詢結果不一致案例分析
DBLE 自定義拆分算法
DBLE rule.xml 配置解析

| 使用指南

開源分佈式中間件 DBLE 快速入門指南
DBLE Schema.xml 配置解析

| 社區活動

如何獲取全國 25場 MySQL 主題大會免費入場券

相關文章
相關標籤/搜索