user 標籤:
這個標籤主要用於定義登陸 mycat 的用戶和權限。前端
<user name="test"> <property name="password">test</property> <property name="schemas">TESTDB</property> <property name="readOnly">true</property> <property name="benchmark">11111</property> <property name="usingDecrypt">1</property> <privileges check="false"> <schema name="TESTDB" dml="0010" showTables="custome/mysql"> <table name="tbl_user" dml="0110"></table> <table name="tbl_dynamic" dml="1111"></table> </schema> </privileges> </user>
例如上面的例子中,我定義了一個用戶:
用戶名爲 test
密碼也爲 test
可訪問的 schema 也只有 TESTDB 一個。java
若是我在 schema.xml 中定義有多個 schema,這裏這個用戶是沒法訪問其餘的 schema的。在 mysql 客戶端看來則是沒法使用 use 切換到這個其餘的數據庫。若是使用了 use 命令,則 mycat 會報出這樣的錯誤提示:python
ERROR 1044 (HY000): Access denied for user 'test' to database 'xxx'
property 標籤:
用於具體聲明的屬性值。mysql
password屬性:
聲明密碼sqlreadOnly屬性:
聲明限制用戶是否只是可讀; 爲 true 或 false 數據庫schemas屬性:
聲明用戶可訪問的 schema;修改 schemas 內的文原本控制用戶可訪問的 schema,同時訪問多個 schema 的話使用","隔開後端<property name="schemas">TESTDB,db1,db2</property>Benchmark屬性:
聲明該用戶最大鏈接數;當前端的總體 connection 數達到(benchmark)基準值時,對來自該帳戶的請求開始拒絕鏈接,0 或不設表示不限制加密<property name="benchmark">1000</property>usingDecrypt屬性:
聲明是否對密碼加密默認 0 否 如須要開啓配置 1,同時使用加密程序對密碼加密,
加密命令爲:
執行 mycat jar 程序:3djava -cp Mycat-server-1.4.1-dev.jar org.opencloudb.util.DecryptUtil 0:user:passwordMycat-server-1.4.1-dev.jar 爲 mycat download 下載目錄的 jar
1:host:user:password 中 0 爲前端加密標誌code
privileges 子節點
對用戶的 schema 及 下級的 table 進行精細化的 DML 權限控制,privileges 節點中的 check 屬性是用於標識是否開啓 DML 權限檢查, 默認 false 標識不檢查,固然 privileges 節點不配置,等同 check=false;
因爲 Mycat 一個用戶的 schemas 屬性可配置多個 schema ,因此 privileges 的下級節點 schema 節點一樣可配置多個,對多庫多表進行細粒度的 DML 權限控制。
<user name="zhuam"> <property name="password">111111</property> <property name="schemas">TESTDB,TESTDB1</property> <!-- 表級權限: Table 級的 dml(curd)控制,未設置的 Table 繼承 schema 的 dml --> <!-- TODO: 非 CURD SQL 語句, 透明傳遞至後端 --> <privileges check="true"> <schema name="TESTDB" dml="0110" > <table name="table01" dml="0111"></table> <table name="table02" dml="1111"></table> </schema> <schema name="TESTDB1" dml="0110"> <table name="table03" dml="1110"></table> <table name="table04" dml="1010"></table> </schema> </privileges> </user>