国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種控制用戶訪問權(quán)限的方法和裝置與流程

      文檔序號:12035077閱讀:256來源:國知局
      本發(fā)明涉及大數(shù)據(jù)應(yīng)用領(lǐng)域,尤指一種控制用戶訪問權(quán)限的方法和裝置。
      背景技術(shù)
      ::隨著大數(shù)據(jù)技術(shù)的應(yīng)用領(lǐng)域越發(fā)的廣泛,數(shù)據(jù)量級也越來越大,數(shù)據(jù)應(yīng)用安全已經(jīng)成為大數(shù)據(jù)應(yīng)用領(lǐng)域的重中之重,而對于一些敏感性較強(qiáng)(例如金融、政府、銀行、公安系統(tǒng)及通訊等領(lǐng)域)的數(shù)據(jù),在使用時往往需要更高級別的保護(hù)措施,以保障數(shù)據(jù)的安全。目前,對于上述領(lǐng)域的數(shù)據(jù)進(jìn)行保護(hù)時,往往需要行級別權(quán)限保護(hù)來過濾掉其中一些敏感數(shù)據(jù)量,向用戶提供更安全、開放和有效的大數(shù)據(jù)訪問平臺,從而更有效的進(jìn)行數(shù)據(jù)的互通互聯(lián),更大的發(fā)揮大數(shù)據(jù)的價值?,F(xiàn)有的行級別權(quán)限保護(hù)的方法包括以下兩種方案:功能模塊控制用戶訪問權(quán)限方法和視圖控制權(quán)限方法。其中,功能模塊控制用戶訪問權(quán)限方法是在應(yīng)用程序級來進(jìn)行權(quán)限控制,通過在應(yīng)用程序中添加關(guān)鍵字where來進(jìn)行限制,但是,該方法只能在應(yīng)用程序級別進(jìn)行控制,如果繞開應(yīng)用程序,則無法控制;視圖控制權(quán)限方法是通過view(數(shù)據(jù)庫一般包括table和view,其中table存儲數(shù)據(jù),view不存儲數(shù)據(jù),當(dāng)操作view中的數(shù)據(jù)時,實(shí)際是操作與之關(guān)聯(lián)的table)實(shí)現(xiàn)權(quán)限控制,在查詢語句中加入關(guān)鍵字where來實(shí)現(xiàn)權(quán)限控制,但是,當(dāng)表結(jié)構(gòu)或者權(quán)限變更的時候就很不容易操作,編碼工作量大,同時系統(tǒng)適用用戶管理體系的彈性空間較小,一旦權(quán)限邏輯發(fā)生變動,就可能需要修改權(quán)限體系,導(dǎo)致所有的view都必須修改。因此,如何更加快速、便捷地對行級別的數(shù)據(jù)過濾成為當(dāng)前亟需解決的難題。技術(shù)實(shí)現(xiàn)要素:本申請?zhí)峁┝艘环N控制用戶訪問權(quán)限的方法和裝置,能夠更加快速、便 捷地對行級別的數(shù)據(jù)過濾,從而能夠更大的發(fā)揮大數(shù)據(jù)的價值。為了達(dá)到本申請目的,本申請?zhí)峁┝艘环N控制用戶訪問權(quán)限的方法,包括:獲取攜帶有結(jié)構(gòu)化查詢語言sql語句和用戶信息的sql請求;根據(jù)獲得的sql語句獲取需要添加行限制信息的位置以及需要查詢的表;根據(jù)獲得的用戶信息獲取與其對應(yīng)的用戶對表的行限制信息;將獲得的需要查詢的表對應(yīng)的用戶對表的行限制信息添加在獲得的位置處;對添加有用戶對表的行限制信息的sql語句進(jìn)行解析以過濾掉不允許該用戶查看的信息??蛇x地,所述根據(jù)獲得的sql語句獲取需要添加行限制信息的位置包括:對所述sql語句進(jìn)行詞法解析以獲取詞法流;根據(jù)獲得的詞法流確定select子句、from子句和where子句在所述sql語句中的位置;將所述where子句在所述sql語句中的位置作為所述需要添加行限制信息的位置??蛇x地,所述根據(jù)獲得的sql語句獲取需要查詢的表包括:對獲得的所述詞法流進(jìn)行語法解析以生成語法樹;在生成的語法樹中根據(jù)獲得的所述from子句在所述sql語句中的位置查找所述from子句中查詢的表并將查找到的所述from子句中查詢的表作為所述需要查詢的表??蛇x地,所述將獲得的需要查詢的表對應(yīng)的用戶對表的行限制信息添加在獲得的位置處包括:在獲得的所述用戶對表的行限制信息中查找與所述from子句中查詢的表對應(yīng)的表的行限制信息;將查找到的與所述from子句中查詢的表對應(yīng)的表的行限制信息添加在所述sql語句的所述where子句中??蛇x地,該方法之前還包括:獲取用戶對大數(shù)據(jù)查詢引擎中表的行限制信息;將所述用戶信息和獲得的所述用戶對表的行限制信息對應(yīng)存儲??蛇x地,所述用戶信息和獲得的所述用戶對表的行限制信息對應(yīng)存儲在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)mysql中。本申請還提供了一種控制用戶訪問權(quán)限的裝置,包括:獲取模塊、解析模塊、確定模塊、添加模塊和過濾模塊;其中,獲取模塊,用于獲取攜帶有結(jié)構(gòu)化查詢語言sql語句和用戶信息的sql請求;解析模塊,用于根據(jù)獲得的sql語句獲取需要添加行限制信息的位置以及需要查詢的表;確定模塊,用于根據(jù)獲得的用戶信息獲取與其對應(yīng)的用戶對表的行限制信息;添加模塊,用于將獲得的需要查詢的表對應(yīng)的用戶對表的行限制信息添加在獲得的位置處;過濾模塊,用于對添加有用戶對表的行限制信息的sql語句進(jìn)行解析以過濾掉不允許該用戶查看的信息??蛇x地,所述解析模塊包括詞法解析單元,用于對所述sql語句進(jìn)行詞法解析以獲取詞法流;根據(jù)獲得的詞法流確定select子句、from子句和where子句在所述sql語句中的位置;將所述where子句在所述sql語句中的位置作為所述需要添加行限制信息的位置??蛇x地,所述解析模塊還包括語法解析單元,用于對獲得的所述詞法流進(jìn)行語法解析以生成語法樹;在生成的語法樹中根據(jù)獲得的所述from子句在所述sql語句中的位置查找所述from子句中查詢的表并將查找到的所述from子句中查詢的表作為所述需要查詢的表。可選地,所述添加模塊,具體用于:在獲得的所述用戶對表的行限制信息中查找與所述from子句中查詢的表對應(yīng)的表的行限制信息;將查找到的與所述from子句中查詢的表對應(yīng)的表的行限制信息添加在所述sql語句的所述where子句中??蛇x地,該還包括存儲模塊,用于獲取用戶對大數(shù)據(jù)查詢引擎中表的行限制信息;將所述用戶信息和獲得的所述用戶對表的行限制信息對應(yīng)存儲。可選地,所述存儲模塊,具體用于將所述用戶信息和獲得的所述用戶對表的行限制信息對應(yīng)存儲在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)mysql中。本申請實(shí)施例包括:獲取攜帶有結(jié)構(gòu)化查詢語言sql語句和用戶信息的sql請求;根據(jù)獲得的sql語句獲取需要添加行限制信息的位置以及需要查詢的表;根據(jù)獲得的用戶信息獲取與其對應(yīng)的用戶對表的行限制信息;將獲得的需要查詢的表對應(yīng)的用戶對表的行限制信息添加在獲得的位置處;對添加有用戶對表的行限制信息的sql語句進(jìn)行解析以過濾掉不允許該用戶查看的信息。本申請實(shí)施例實(shí)現(xiàn)了更加快速、便捷地對行級別的數(shù)據(jù)過濾,從而更大的發(fā)揮了大數(shù)據(jù)的價值。附圖說明此處所說明的附圖用來提供對本發(fā)明的進(jìn)一步理解,構(gòu)成本申請的一部分,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:圖1為本發(fā)明控制用戶訪問權(quán)限的方法的流程圖;圖2為本發(fā)明接收到的sql語句的語法樹的示意圖;圖3為本發(fā)明遍歷語法樹的方法流程圖;圖4為本發(fā)明添加了行限制信息的sql語句的語法樹的示意圖;圖5為本發(fā)明控制用戶訪問權(quán)限的裝置的結(jié)構(gòu)示意圖。具體實(shí)施方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。圖1為本發(fā)明控制用戶訪問權(quán)限的方法的流程圖,如圖1所示,包括:步驟101:獲取攜帶有結(jié)構(gòu)化查詢語言(sql)語句和用戶信息的sql請求。步驟102:根據(jù)獲得的sql語句獲取需要添加行限制信息的位置以及需要查詢的表。其中,根據(jù)獲得的sql語句獲取需要添加行限制信息的位置包括:對sql語句進(jìn)行詞法解析以獲取詞法流;根據(jù)獲得的詞法流確定select子句、from子句和where子句在sql語句中的位置;將where子句在sql語句中的位置作為需要添加行限制信息的位置。其中,根據(jù)獲得的sql語句獲取需要查詢的表包括:對獲得的詞法流進(jìn)行語法解析以生成語法樹;在生成的語法樹中根據(jù)獲得的from子句在sql語句中的位置查找from子句中查詢的表并將查找到的from子句中查詢的表作為需要查詢的表。其中,select、from和where是sql語句的關(guān)鍵字;select是查詢的關(guān)鍵字,其后面的語句(子句)是查詢功能,select后面跟的是要查詢的哪些域;from是指要查詢的表;where是對查詢要做哪些限制。舉例說明,比如,要查詢shuiwu_info中addr為shandong的所有信息,那么sql語句應(yīng)該為select*fromshuiwu_infowhereaddr=’shandong’,其中的*代表查詢shuiwu_info的所有的域,即所有的列。其中,from子句后面跟的是查詢的哪些表,因此這里的表指的就是查詢了哪些table。步驟103:根據(jù)獲得的用戶信息獲取與其對應(yīng)的用戶對表的行限制信息??蛇x地,該方法之前還包括:獲取用戶對大數(shù)據(jù)查詢引擎中表的行限制信息;將用戶信息和獲得的用戶對表的行限制信息對應(yīng)存儲。其中,大數(shù)據(jù)查詢引擎可以是數(shù)據(jù)倉庫工具(hive)查詢引擎。其中,可以將用戶信息和獲得的用戶對表的行限制信息對應(yīng)存儲在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(mysql)中。其中,用戶信息和用戶對表的行限制信息可以通過web界面,調(diào)用狀態(tài)傳輸(rest,representationalstatetransfer)應(yīng)用程序界面(api)的方式通過web服務(wù)(services)存儲進(jìn)mysql中,或者也可以直接手動插入到mysql中。舉例說明,比如想限制用戶zhangsan只能訪問表shuiwu_info中的addr域?yàn)閟handong的數(shù)據(jù),那么可以將這些信息(用戶信息是zhangsan和只能訪問表shuiwu_info中的addr域?yàn)閟handong的數(shù)據(jù))對應(yīng)存儲進(jìn)mysql中。步驟104:將獲得的需要查詢的表對應(yīng)的用戶對表的行限制信息添加在獲得的位置處。本步驟具體包括:在獲得的用戶對表的行限制信息中查找與from子句中查詢的表對應(yīng)的表的行限制信息;將查找到的與from子句中查詢的表對應(yīng)的表的行限制信息添加在該sql語句的where子句中。步驟105:對添加有用戶對表的行限制信息的sql語句進(jìn)行解析以過濾掉不允許該用戶查看的信息。需要說明的是,假如開始的sql語句是select*fromt,添加了用戶對表的行限制信息之后的sql語句是select*fromtwhereid>100,也就是說重新得到了一個新的sql語句,所以要對添加了用戶對表的行限制信息的sql語句進(jìn)行解析執(zhí)行一遍,也就是說是把sql語句在內(nèi)部處理一遍把用戶對表的行限制信息加上。本步驟從功能上看是在sql語句上把用戶對表的行限制信息加上了,可以保證將用戶不允許看到的信息給過濾掉了;從查詢結(jié)果上看,可以和沒有加限制的結(jié)果進(jìn)行對比。本發(fā)明實(shí)施方式中,通過根據(jù)接收到的sql語句獲取sql語句的select子句、from子句、where子句的位置信息以及from子句中查詢的表以及將獲得的用戶對表的行限制信息添加在該sql語句的where子句中,實(shí)現(xiàn)了更加快速、便捷地對行級別的數(shù)據(jù)過濾,從而更大的發(fā)揮了大數(shù)據(jù)的價值。實(shí)施例步驟一:用戶張三(zhangsan)發(fā)送一條sql語句,sql語句是將表db1.customer和db1.merchant進(jìn)行聯(lián)合查詢((select*fromdb1.customerwhereaddr=’shandong’)mycustomerjoin(select*fromdb1.merchantwhereaddr=’shandong’)mymerchantonmycustomer.merchant_id=mymerchant.id),然后將查詢的結(jié)果插入到表tmp.purchase_records中(insertoverwritetabletmp.purchase_records)。步驟二:在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(mysql)中獲取預(yù)先存儲的張三的用戶對表的行權(quán)限限制信息。步驟三:對接收到的sql語句進(jìn)行詞法解析,解析之后生成如表1所示的詞法流。表1其中,比如sql語句是selectid,namefromtwhereid>100時,表1中的方格中的每一個是一個結(jié)構(gòu)體,里面會包含from關(guān)鍵字,from關(guān)鍵字在sql語句中的位置,第一個方格是from,第二個方格是空格,第三個方格t,其中,第一個方格內(nèi)保存的不僅僅是from這個關(guān)鍵字,還有其在sql語句中的位置,第二個方格也一樣的,保存的不僅僅是空格,還有這個空格在sql語句中的位置。步驟四:通過步驟三生成的詞法流獲取到select、from、where等子句在整個sql語句中的位置信息。步驟五:在進(jìn)行詞法解析之后接下來將進(jìn)行語法解析,生成對應(yīng)的語法樹。步驟六:遍歷生成的語法樹以獲取from子句中的查詢表。步驟一中的sql語句生成的抽象語法樹如圖2所示。從圖2所示的語法樹中可以看出整個sql語句中包含有三個子查詢語句。在獲得整個語法樹時,開始從語法樹的根節(jié)點(diǎn)對整個語法樹進(jìn)行遍歷,遍歷語法樹的規(guī)則如圖3所示,包括:步驟201:從根節(jié)點(diǎn)開始遍歷。步驟202:判斷當(dāng)前節(jié)點(diǎn)是否是查詢(query)節(jié)點(diǎn)。當(dāng)判斷初當(dāng)前節(jié)點(diǎn)是query節(jié)點(diǎn)時,轉(zhuǎn)入步驟203;否則,轉(zhuǎn)入步驟209。步驟203:建立query_rls對象,并將該對象打入行權(quán)限列表中。其中,query_rls是創(chuàng)建的一個類名,這個類保存了對應(yīng)的query節(jié)點(diǎn)的一些信息,比如,查詢了哪些表以及表的別名以及在sql語句中的位置等。其中,行權(quán)限列表存儲有query_rls對象。步驟204:在詞法流中獲取select子句、from子句和where子句在sql語句中的位置信息并打入query_rls對象。步驟205:將查詢表的別名賦給上面的query_rls對象。舉例說明,假如sql語句是selectt1.id,t1.namefromtt1,這里面的t1就是表t的別名,所以需要將表t的別名保存起來。其中,如果別名為空則賦為空。步驟206:判斷查詢表是否是實(shí)際表。當(dāng)判斷出查詢表示實(shí)際表時,轉(zhuǎn)入步驟207;否則,轉(zhuǎn)入步驟208。步驟207:將查詢表的表名賦給上面的query_rls對象。轉(zhuǎn)入步驟209。步驟208:不進(jìn)行賦值,默認(rèn)為空。轉(zhuǎn)入步驟209。步驟209:獲取當(dāng)前節(jié)點(diǎn)的未檢測的子節(jié)點(diǎn)。其中,subquery表示子節(jié)點(diǎn)(或稱之為查詢子節(jié)點(diǎn)),即sql語句中的子查詢語句。步驟210:判斷獲得的當(dāng)前節(jié)點(diǎn)的未檢測的子節(jié)點(diǎn)是否是空。當(dāng)判斷出獲得的當(dāng)前節(jié)點(diǎn)的未檢測的子節(jié)點(diǎn)是空時,轉(zhuǎn)入步驟202;否則,轉(zhuǎn)入步驟 211。步驟211:回退到父節(jié)點(diǎn)。步驟212:判斷父節(jié)點(diǎn)是否是空。當(dāng)判斷出父節(jié)點(diǎn)不為空時,轉(zhuǎn)入步驟209;否則,結(jié)束本流程。在對上面的語法樹遍歷之后,可以得到sql語句中所涉及的from子句中的查詢表是db1.customer和db1.merchant。因此,用戶zhangsan對表db1.customer和db1.merchant的行權(quán)限限制信息分別為db1.customer.id<100000和db1.merchant.id<1000。步驟七:將用戶zhangsan對表db1.customer和db1.merchant的行權(quán)限限制信息添加在where子句中。具體包括:在步驟三的詞法流中獲取了where子句的位置信息,通過對query_rls列表的遍歷將每個表對應(yīng)的行權(quán)限信息加入到sql語句的查詢子句中。這樣就根據(jù)當(dāng)前登陸用戶自動的將對應(yīng)的行權(quán)限限制信息加入到sql中了,最后得到的sql語句的新的語法樹圖4所示。從圖4所示的語法樹中可以看到已經(jīng)加入了用戶的行限制信息。這樣當(dāng)其他用戶訪問時,采取不同的行權(quán)限策略,不同用戶能訪問的數(shù)據(jù)不同,做到了在行級別進(jìn)行數(shù)據(jù)訪問的限制,比如有1000條信息,但是只允許張三訪問前100條信息,而李四允被許訪問前500條信息。圖5為本發(fā)明控制用戶訪問權(quán)限的裝置的結(jié)構(gòu)示意圖,如圖5所示,包括:獲取模塊、解析模塊、確定模塊、添加模塊和過濾模塊。其中,獲取模塊,用于獲取攜帶有結(jié)構(gòu)化查詢語言(sql)語句和用戶信息的sql請求。解析模塊,用于根據(jù)獲得的sql語句獲取需要添加行限制信息的位置以及需要查詢的表。其中,解析模塊包括詞法解析單元,用于對sql語句進(jìn)行詞法解析以獲取詞法流;根據(jù)獲得的詞法流確定select子句、from子句和where子句在該sql語句中的位置;將where子句在該sql語句中的位置作為上述需要添加行限制信息的位置。其中,詞法解析單元可以是大數(shù)據(jù)查詢引擎。其中,大數(shù)據(jù)查詢引擎可以是數(shù)據(jù)倉庫工具(hive)查詢引擎。其中,解析模塊還包括語法解析單元,用于對獲得的詞法流進(jìn)行語法解析以生成語法樹;在生成的語法樹中根據(jù)獲得的from子句在sql語句中的位置查找from子句中查詢的表并將查找到的from子句中查詢的表作為上述需要查詢的表。確定模塊,用于根據(jù)獲得的用戶信息獲取與其對應(yīng)的用戶對表的行限制信息。添加模塊,用于將獲得的需要查詢的表對應(yīng)的用戶對表的行限制信息添加在獲得的位置處。其中,添加模塊,具體用于:在獲得的用戶對表的行限制信息中查找與from子句中查詢的表對應(yīng)的表的行限制信息;將查找到的與from子句中查詢的表對應(yīng)的表的行限制信息添加在sql語句的where子句中。過濾模塊,用于對添加有用戶對表的行限制信息的sql語句進(jìn)行解析以過濾掉不允許該用戶查看的信息??蛇x地,該還包括存儲模塊,用于獲取用戶對大數(shù)據(jù)查詢引擎中表的行限制信息;將用戶信息和獲得的用戶對表的行限制信息對應(yīng)存儲。其中,存儲模塊具體用于將用戶信息和獲得的用戶對表的行限制信息對應(yīng)存儲在關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(mysql)中。需要說明的是,在本文中,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過 程、方法、物品或者裝置中還存在另外的相同要素。上述本申請實(shí)施例序號僅僅為了描述,不代表實(shí)施例的優(yōu)劣。通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機(jī),計算機(jī),服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實(shí)施例所述的方法。以上僅為本申請的優(yōu)選實(shí)施例,并非因此限制本申請的專利范圍,凡是利用本申請說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的
      技術(shù)領(lǐng)域
      :,均同理包括在本申請的專利保護(hù)范圍內(nèi)。當(dāng)前第1頁12當(dāng)前第1頁12
      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1