本篇文章為大家展示了MLSQL中怎么實(shí)現(xiàn)編譯時(shí)權(quán)限控制,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
權(quán)限控制,對(duì)于MLSQL而言的重要程度可以說是生命線。 MLSQL需要面對(duì)各式各樣的資源訪問,比如MySQL, Oracle,HDFS,Hive,Kafka,Sorl,ElasticSearch,Redis,API,Web等等,不同用戶對(duì)這些數(shù)據(jù)源(以及表,列)的權(quán)限是不一樣的。
傳統(tǒng)模式是,每個(gè)用戶都需要有個(gè)proxy user,然后到每個(gè)數(shù)據(jù)源里面給這個(gè)proxy user進(jìn)行授權(quán)。 這看起來似乎就是麻煩點(diǎn),但是在實(shí)際操作中,基本是很難執(zhí)行的,不同的數(shù)據(jù)源在不同的團(tuán)隊(duì)里面,那么整個(gè)申請(qǐng)流程可能要天甚至周計(jì)了。
如果上面的問題已經(jīng)讓人氣餒,那么對(duì)于采用Hive做數(shù)倉的公司,可能對(duì)HIve權(quán)限訪問更讓人絕望。Hive的授權(quán)模式是跟著Linux用戶走的,也就是Spark啟動(dòng)用戶是誰,誰就有權(quán)限訪問,這個(gè)對(duì)于多租戶的MLSQL應(yīng)用來說,則是完全不可行了,比如啟動(dòng)Spark的是sparkUser,但是真正執(zhí)行的人,其實(shí)可能是張三,李四等等。Hive就無法知道是具體哪個(gè)人完成的,只知道是sparkUser。
還有一個(gè)大家可能感慨的點(diǎn):
我們好不容易寫了個(gè)腳本,跑了一個(gè)小時(shí),突然腳本失敗,一看,第350行那里訪問的數(shù)據(jù)源權(quán)限不足。 這可真是讓人惱火。
問題來了
那么,怎么才能在腳本運(yùn)行前,就知道腳本里涉及到的資源是不是都被授權(quán)了?
答案是:有
題外話:標(biāo)題不嚴(yán)謹(jǐn),因?yàn)镸LSQL本質(zhì)是個(gè)解釋性執(zhí)行語言,不需要編譯,更好的標(biāo)題是 【解析時(shí)權(quán)限控制】。
MLSQL如果開啟了權(quán)限驗(yàn)證,他會(huì)先掃描整個(gè)腳本,然后提取必要的信息,這些信息就包含了各種數(shù)據(jù)源的詳細(xì)信息,從而在運(yùn)行前就可以知道你是不是訪問了未經(jīng)授權(quán)的庫表。那么MLSQL是怎么做到的呢?我們來看下面的信息:
connect jdbc where driver="com.mysql.jdbc.Driver" and url="jdbc:mysql://${ip}:${host}/db1?${MYSQL_URL_PARAMS}" and user="${user}" and password="${password}" as db1_ref; load jdbc.`db1_ref .people` as people; save append people as jdbc.`db1_ref.spam` ;
因?yàn)镸LSQL要求任何數(shù)據(jù)源,都需要使用load語句進(jìn)行加載,在解析load語句時(shí),MLSQL知道,用戶現(xiàn)在要訪問的是基于JDBC協(xié)議的數(shù)據(jù)源訪問,他通過url拿到了這些信息:
db: db1
table: people
operateType: load
sourceType: mysql
tableType: JDBC
當(dāng)然,這個(gè)腳本用戶還會(huì)寫入一張spam表,也一樣會(huì)被提取信息:
db: db1
table: people
operateType: save
sourceType: mysql
tableType: JDBC
然后還有一張臨時(shí)表people,所以這個(gè)腳本總共有三張表信息,之后這些信息會(huì)被發(fā)送到AuthCenter里進(jìn)行判斷,AuthCenter會(huì)告訴MLSQL那張表是沒有對(duì)當(dāng)前用戶授權(quán)的,如果發(fā)現(xiàn)未經(jīng)授權(quán)的表,MLSQL會(huì)直接拋出異常。整個(gè)過程中,完全不會(huì)執(zhí)行任何物理計(jì)劃,只是對(duì)腳本的信息抽取。
在MLSQL中,我們不能在select語句里訪問hive表,只能通過load語句加載,比如下面的句子會(huì)報(bào)錯(cuò):
select * from public.abc as table1;
我們無權(quán)在select語句中訪問public.abc庫,如果需要使用,你可以通過如下方式完成:
load hive.`public.abc ` as abc; select * from abc as table1;
如何實(shí)現(xiàn)列級(jí)別控制
MLSQL在解析load語句的時(shí)候,會(huì)詢問當(dāng)前用戶訪問的表,有哪些列是被授權(quán)的,然后會(huì)改寫最后load的語句,提供一個(gè)新的視圖,該視圖只有用戶被授權(quán)的列。
上述內(nèi)容就是MLSQL中怎么實(shí)現(xiàn)編譯時(shí)權(quán)限控制,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
標(biāo)題名稱:MLSQL中怎么實(shí)現(xiàn)編譯時(shí)權(quán)限控制-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://aaarwkj.com/article38/ccjisp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計(jì)、商城網(wǎng)站、App開發(fā)、做網(wǎng)站、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容