開發(fā)人員在開發(fā)過程中避免不了需要訪問數(shù)據(jù)庫(kù)數(shù)據(jù)谚鄙,尤其在團(tuán)隊(duì)協(xié)作中,對(duì)于數(shù)據(jù)庫(kù)數(shù)據(jù)的訪問會(huì)更加頻繁刁绒。
通常團(tuán)隊(duì)成員在管理員或者 DBA 準(zhǔn)備好數(shù)據(jù)源之后闷营,就可以憑借數(shù)據(jù)庫(kù)的賬號(hào)和密碼訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù)了。也正是從這一刻開始知市,這個(gè)團(tuán)隊(duì)訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí)就會(huì)面臨諸多問題傻盟,本文枚舉其中三個(gè)比較典型且棘手的問題:
- 團(tuán)隊(duì)成員在設(shè)計(jì)數(shù)據(jù)庫(kù)表結(jié)構(gòu)容易帶有隨意性,導(dǎo)致數(shù)據(jù)庫(kù)結(jié)構(gòu)規(guī)范不統(tǒng)一嫂丙。
- 容易忽略賬號(hào)和權(quán)限的管控娘赴,導(dǎo)致數(shù)據(jù)庫(kù)訪問缺失權(quán)限控制。
- 數(shù)據(jù)庫(kù)的變更的發(fā)布需要多個(gè)團(tuán)隊(duì)成員通過流程化的方式相互協(xié)作跟啤,如果協(xié)作過程不順暢則會(huì)降低團(tuán)隊(duì)效率诽表。
問題的嚴(yán)重性
如果這些問題沒有被妥善處理好,會(huì)產(chǎn)生哪些影響呢隅肥?接下來我們舉幾個(gè)案例竿奏。
數(shù)據(jù)庫(kù)結(jié)構(gòu)規(guī)范不統(tǒng)一
表結(jié)構(gòu)不規(guī)范會(huì)導(dǎo)致多種后果,包括數(shù)據(jù)分析困難腥放、執(zhí)行速度下降泛啸、以及數(shù)據(jù)可視化困難。這些問題普遍帶有 滯后性秃症、隱蔽性 特點(diǎn)平痰,當(dāng)解決這些問題時(shí)又容易產(chǎn)生更多連帶風(fēng)險(xiǎn)汞舱。
- 數(shù)據(jù)分析困難:表結(jié)構(gòu)不規(guī)范可能導(dǎo)致數(shù)據(jù)分析師在處理數(shù)據(jù)時(shí)遇到困難。例如宗雇,相同含義字段名稱不統(tǒng)一昂芜,又缺乏相應(yīng)的元信息備注,導(dǎo)致后續(xù)分析數(shù)據(jù)時(shí)還需要消耗大量時(shí)間精力對(duì)數(shù)據(jù)關(guān)系進(jìn)行梳理赔蒲。
- 執(zhí)行速度下降:不合理的表結(jié)構(gòu)設(shè)計(jì)可能導(dǎo)致數(shù)據(jù)庫(kù)查詢執(zhí)行速度下降泌神。例如,某些查詢語(yǔ)句的執(zhí)行計(jì)劃看似相同舞虱,但由于表結(jié)構(gòu)的不合理設(shè)計(jì)欢际,實(shí)際執(zhí)行效果相差很大,導(dǎo)致查詢速度變慢矾兜。而這個(gè)問題往往在數(shù)據(jù)量變大之后才會(huì)凸顯出來损趋。
- 數(shù)據(jù)可視化困難:原本不為空的字段列由于表結(jié)構(gòu)約束缺失導(dǎo)致臟數(shù)據(jù)被意外錄入,進(jìn)而在數(shù)據(jù)可視化結(jié)果呈現(xiàn)上產(chǎn)生誤導(dǎo)椅寺,甚至還會(huì)影響用戶對(duì)數(shù)據(jù)的準(zhǔn)確理解浑槽。最直觀的問題就是 “空字符串” 和 “空值” 之間的差別難以被有效界定。
綜上所述返帕,表結(jié)構(gòu)不規(guī)范產(chǎn)生的不僅會(huì)增加數(shù)據(jù)分析的難度桐玻,降低數(shù)據(jù)庫(kù)查詢的執(zhí)行速度,還會(huì)影響數(shù)據(jù)可視化的效果和質(zhì)量荆萤。因此镊靴,規(guī)范化的表結(jié)構(gòu)設(shè)計(jì)對(duì)于業(yè)務(wù)演進(jìn)至關(guān)重要。
數(shù)據(jù)庫(kù)訪問缺失權(quán)限控制
數(shù)據(jù)庫(kù)訪問缺失權(quán)限控制的危害會(huì)比較嚴(yán)重链韭,主要體現(xiàn)在以下幾個(gè)方面:
- 敏感數(shù)據(jù)泄露更顯:數(shù)據(jù)庫(kù)訪問權(quán)限的缺失容易讓未經(jīng)授權(quán)的用戶訪問到敏感數(shù)據(jù)偏竟,如用戶個(gè)人信息、財(cái)務(wù)數(shù)據(jù)等敞峭。當(dāng)這些具有高度敏感性的數(shù)據(jù)被泄漏出去后苫耸,會(huì)造成更大的災(zāi)害。例如儡陨,被不法分子用于詐騙,以及錯(cuò)失優(yōu)質(zhì)商業(yè)機(jī)會(huì)等量淌。
- 數(shù)據(jù)篡改風(fēng)險(xiǎn):攻擊者可能通過越權(quán)訪問修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)骗村,通過篡改數(shù)據(jù)謀取私利或者對(duì)整個(gè)業(yè)務(wù)運(yùn)行造成嚴(yán)重影響,如修改賬戶余額呀枢,刪庫(kù)跑路等胚股。
- 法律責(zé)任與聲譽(yù)損害:由于缺乏權(quán)限控制導(dǎo)致用戶敏感數(shù)據(jù)被泄露,進(jìn)而個(gè)人隱私被侵犯裙秋。企業(yè)可能臨法律責(zé)任琅拌,同時(shí)企業(yè)的聲譽(yù)也將受損缨伊。
綜上所述,數(shù)據(jù)庫(kù)訪問缺失權(quán)限控制會(huì)帶來更加嚴(yán)重的安全風(fēng)險(xiǎn)和法律后果进宝。所以團(tuán)隊(duì)中對(duì)于數(shù)據(jù)庫(kù)數(shù)據(jù)的訪問必須實(shí)施嚴(yán)格的訪問控制和權(quán)限管理刻坊,以避免法律風(fēng)險(xiǎn)以及聲譽(yù)影響。
協(xié)作過程不順暢
協(xié)作過程不順暢最主要的影響是團(tuán)隊(duì)效率党晋,主要包括:
- 系統(tǒng)穩(wěn)定性受損:協(xié)作不暢可能導(dǎo)致數(shù)據(jù)庫(kù)變更過程中出現(xiàn)錯(cuò)誤或遺漏谭胚,進(jìn)而影響系統(tǒng)的穩(wěn)定性和可靠性,增加系統(tǒng)崩潰的風(fēng)險(xiǎn)未玻。
- 數(shù)據(jù)安全性問題:協(xié)作不順暢還可能引發(fā)數(shù)據(jù)安全性問題灾而,如數(shù)據(jù)丟失或泄露,對(duì)組織造成重大損失扳剿。
- 團(tuán)隊(duì)資源浪費(fèi):不順暢的協(xié)作可能導(dǎo)致不必要的重復(fù)工作或錯(cuò)誤操作旁趟,浪費(fèi)人力和時(shí)間資源。
綜上所述庇绽,數(shù)據(jù)庫(kù)變更協(xié)作不順暢會(huì)對(duì)系統(tǒng)穩(wěn)定性锡搜、數(shù)據(jù)安全性、團(tuán)隊(duì)資源利用等多方面造成不良影響敛劝,進(jìn)而使團(tuán)隊(duì)的效率變得更加低下余爆。
解決問題的手段
這些問題在業(yè)內(nèi)通常有著比較明確的解決思路,核心思想是通過團(tuán)隊(duì)化的工具將數(shù)據(jù)庫(kù)的訪問集中到統(tǒng)一平臺(tái)上進(jìn)行夸盟,并通過統(tǒng)一平臺(tái)達(dá)成如下幾個(gè)關(guān)鍵控制手段:
- 通過 SQL 規(guī)則校驗(yàn)蛾方,拒絕不合理的數(shù)據(jù)庫(kù)結(jié)構(gòu)變更,從而保證數(shù)據(jù)庫(kù)規(guī)范上陕。
- 集中權(quán)限控制桩砰,方便一目了然地管理和控制。
- 避免直接連接數(shù)據(jù)庫(kù)释簿,保護(hù)數(shù)據(jù)庫(kù)賬號(hào)亚隅。
- 對(duì)查詢結(jié)果進(jìn)行脫敏保護(hù),從而避免數(shù)據(jù)隱私泄漏及法律風(fēng)險(xiǎn)庶溶。
- 通過工單流程提升團(tuán)隊(duì)協(xié)作效率煮纵。
- 通過企業(yè)統(tǒng)一認(rèn)證,讓團(tuán)隊(duì)的賬號(hào)管理變得更加輕松和簡(jiǎn)單偏螺。
目前能夠提供上述問題解決方案的產(chǎn)品有很多行疏,這里就不再展開。
CloudDM Team 作為全新的企業(yè)級(jí)數(shù)據(jù)庫(kù)數(shù)據(jù)訪問工具套像,在團(tuán)隊(duì)使用場(chǎng)景中做了更加細(xì)致和深入的思考酿联,自然也包含上述問題的解決方案。
規(guī)則校驗(yàn)
使用腳本化方式實(shí)現(xiàn) SQL 規(guī)則校驗(yàn)是一個(gè)比較常見的方法,常見的方案中有兩種技術(shù)路線贞让。
- 使用已有語(yǔ)言 ava周崭、JavaScript、Lua喳张、Groovy 作為規(guī)則引擎续镇。
- 使用具有較高限制的自研 DSL 作為規(guī)則引擎。
使用已有語(yǔ)言通常會(huì)面臨兩個(gè)問題:
- 程序如何接入蹲姐?
- 安全如何控制磨取?
在采用通用編程語(yǔ)言作為規(guī)則引擎后,安全控制是最難以解決的柴墩。這是由于通用編程語(yǔ)言通常是面向更加廣泛而又復(fù)雜的場(chǎng)景忙厌,需要提供更加靈活和底層的 API 作為保障,比如不受限制的訪問網(wǎng)絡(luò)江咳、文件等資源逢净。
如果采用通用編程語(yǔ)言作為引擎,雖然可以快速滿足需求并節(jié)省開發(fā)成本歼指,但需要在安全控制上做更加深入的控制爹土,本文列出一些用于思考:
- 網(wǎng)絡(luò):通常 SQL 規(guī)則腳本中是用來承擔(dān)邏輯判斷,并不需要網(wǎng)絡(luò)通信踩身,因此網(wǎng)絡(luò)能力通常是不必要的胀茵。
- 文件:理由同上
- CPU/內(nèi)存:這兩類資源具有高度相似性,都是難以被控制挟阻。例如:規(guī)則腳本出現(xiàn)一個(gè)死循環(huán)琼娘,通常作為腳本宿主程序是無法主動(dòng)干預(yù)的。
- 調(diào)動(dòng)外部程序:這和網(wǎng)絡(luò)附鸽、文件脱拼、比較相像。原則上規(guī)則腳本的執(zhí)行是不能調(diào)用外部程序的坷备。
- 其它技術(shù)組件導(dǎo)致的安全漏洞:常見的如 OGNL 表達(dá)式的越權(quán)訪問熄浓。
如果采用使用場(chǎng)景更加明確的自研 DSL 作為規(guī)則引擎,通常不會(huì)出現(xiàn)上述問題省撑。因此普遍情況下只要技術(shù)投入成本可以接受赌蔑,都會(huì)選擇此類技術(shù)方案,其主要優(yōu)點(diǎn)是可控性較高竟秫。
CloudDM Team 采用了全新的 自研 Rule Script 引擎娃惯,并通過 Rule Script 強(qiáng)大的編程能力使得 CloudDM Team 的所有內(nèi)置規(guī)則實(shí)現(xiàn)了全部腳本化。這包括 SQL 規(guī)則和脫敏規(guī)則鸿摇。下面這張圖向大家展示了 Rule Script 在 CloudDM Team 中的樣貌。
SQL 查詢規(guī)則展示
查詢規(guī)則展示
權(quán)限控制
使用團(tuán)隊(duì)化的工具將數(shù)據(jù)庫(kù)的訪問集中到統(tǒng)一平臺(tái)劈猿,天然的好處是可以避免直接連接數(shù)據(jù)庫(kù)拙吉,以保護(hù)數(shù)據(jù)庫(kù)賬號(hào)潮孽。而在權(quán)限控制方面,一個(gè)團(tuán)隊(duì)化的數(shù)據(jù)庫(kù)訪問工具必然會(huì)面臨來自兩個(gè)新維度上的要求:
- 功能上的權(quán)限控制
- 資源上的權(quán)限控制
在工程實(shí)踐過程中筷黔,權(quán)限系統(tǒng)的設(shè)計(jì)會(huì)受到諸多因素的影響往史,比較常見的權(quán)限控制模型和特點(diǎn)有:
- IBAC/ACL,基于身份的訪問控制佛舱。核心思想是為資源制定一個(gè) 策略列表椎例,當(dāng)訪問資源時(shí)通過策略列表來保護(hù)資源的訪問。
- RBAC请祖,基于角色的訪問控制订歪。模型核心定義了 用戶、角色肆捕、權(quán)限 三個(gè)元素刷晋,在軟件產(chǎn)品的功能控制中具有較為普遍的應(yīng)用,它是一個(gè)靜態(tài)模型慎陵。
- PBAC眼虱,基于策略的訪問控制,相比較 RBAC 模型而言席纽,PBAC 基于規(guī)則和策略動(dòng)態(tài)確定訪問權(quán)限捏悬。它屬于動(dòng)態(tài)模型。
- ABAC润梯,基于屬性的訪問控制过牙,模型重點(diǎn)在于對(duì)屬性的策略化運(yùn)用。角色仆救、策略抒和、身份 在 ABAC 模型中都是屬性中的一種,ABAC 和 PBAC 某種程度上來看比較相似彤蔽。而 ABAC 最大的弊端就是在于它的復(fù)雜性摧莽,在落地 ABAC 時(shí)某些情況下甚至需要借助 XACML 語(yǔ)言腳本來實(shí)現(xiàn)權(quán)限控制。
為了方便理解顿痪,我們以 “資源是否具備某個(gè)權(quán)限的訪問權(quán)限” 為典型內(nèi)在需求镊辕,以 用戶门扇、角色抚垄、策略 為支點(diǎn)燕少,對(duì)已知的權(quán)限模型進(jìn)行梳理酝陈,并總結(jié)如下:
-
當(dāng)選擇 策略搀罢、權(quán)限慷嗜、用戶 三角關(guān)系作為權(quán)限訪問控制三要素時(shí)筐骇,便是 ACL/IBAC 模型录淡。
- 當(dāng)某個(gè)資源被訪問,只需要執(zhí)行一遍策略規(guī)則即可得到權(quán)限亏娜,這便是最簡(jiǎn)單的 ACL(Access Control Lists)焕窝。
- 將用戶/資源進(jìn)行 標(biāo)識(shí)符 歸類,在利用 ACL 對(duì) 標(biāo)識(shí) 的用戶資源進(jìn)行訪問控制维贺,這便是 IBAC(Identity-Based Access Control)它掂。
-
使用 角色、用戶溯泣、權(quán)限 三角關(guān)系作為權(quán)限訪問控制三要素虐秋,便是最常見的 RBAC 模型。
- RBAC(Role-Based Access Control)是一種基于靜態(tài)狀態(tài)下的權(quán)限控制模型垃沦,同時(shí)也是用途最為廣泛的權(quán)限控制模型客给。
- RBAC 的運(yùn)用非常考驗(yàn)角色的設(shè)計(jì)者栏尚,角色的粒度過細(xì)容易造成特權(quán)泛濫起愈,粒度過粗又會(huì)導(dǎo)致拆分角色而造成角色爆炸。
-
使用 策略译仗、權(quán)限 關(guān)系時(shí)便是 PBAC 模型抬虽,該模型的最大特點(diǎn)是著重基于策略的訪問控制。
- PBAC(Policy-Based Access Control)通過定義策略來管理訪問控制纵菌,這些策略可以根據(jù)需要定制阐污。
- 動(dòng)態(tài)的訪問控制是 PBAC 模型的核心關(guān)鍵,在實(shí)施 PBAC 時(shí)往往需要附帶 審計(jì) 記錄以方便事后查閱咱圆。
-
ABAC(Attribute-Based Access Control) 基于屬性進(jìn)行訪問控制笛辟。在模型中訪問決策不僅基于用戶角色。
- ABAC 訪問控制機(jī)制根據(jù)主體屬性序苏、對(duì)象屬性手幢、環(huán)境參數(shù)、操作忱详、策略對(duì)該請(qǐng)求進(jìn)行授權(quán)驗(yàn)證围来,具有更高的靈活性。
- ABAC 在一定程度上和 PBAC 具有相似性匈睁。
- 在 ABAC 看來 RBAC 中的角色监透、IBAC 中的標(biāo)識(shí)符都是一種屬性。
- 在 ABAC 模型體系中有很多實(shí)現(xiàn)或者標(biāo)準(zhǔn)航唆,比如:XACML胀蛮、NGAC、LBAC糯钙。
在實(shí)際工程實(shí)踐中可以選用的權(quán)限控制模型可能還會(huì)更多粪狼。具體如何選擇需要基于客觀因素來決定退腥,不能一概而論那種模型更好。而在具體落地過程中往往參考上述標(biāo)準(zhǔn)模型也會(huì)產(chǎn)生更多的變種和新特性再榄。
CloudDM Team 在實(shí)踐權(quán)限控制的過程中采用了多種模型結(jié)合的方式:
- 通過 RBAC 模型作為功能權(quán)限的訪問控制阅虫。因此 CloudDM Team 可以定義角色、用戶不跟,并且可以為不同角色綁定權(quán)限。
- 通過 IBAC 對(duì)具體數(shù)據(jù)庫(kù)資源進(jìn)行訪問控制米碰。目前支持對(duì)實(shí)例級(jí)資源進(jìn)行細(xì)粒度 ACL 控制窝革。
工單流程
在使用團(tuán)隊(duì)化數(shù)據(jù)庫(kù)訪問工具時(shí),工單流程是一個(gè)比較常見的場(chǎng)景吕座,一個(gè)典型的用戶場(chǎng)景是:
- 開發(fā)遞交了 SQL 發(fā)布流程虐译。
- DBA/管理員或各層級(jí)管理人員會(huì)執(zhí)行流程審批。
- 在流程通過后完成最終 SQL 的執(zhí)行吴趴。
在專業(yè)的領(lǐng)域中漆诽,一般由 OA 系統(tǒng)可以完成上述動(dòng)作。而在 OA 出現(xiàn)之前锣枝,辦公室解決流程化問題往往是填寫各種申請(qǐng)表厢拭,然后在各級(jí)領(lǐng)導(dǎo)/負(fù)責(zé)人、部門之間流轉(zhuǎn)這些申請(qǐng)單撇叁。對(duì)于數(shù)據(jù)庫(kù)變更的審核往往更加難以管理供鸠,通常由更加專業(yè)的 DBA 負(fù)責(zé)數(shù)據(jù)庫(kù)的變更操作。
一個(gè) OA 系統(tǒng)面臨的主要問題是如何方便地定義表單以及流轉(zhuǎn)表單陨闹。所以在技術(shù)上 OA 系統(tǒng)通常包括如下核心技術(shù):
- 表單設(shè)計(jì)器
- 工作流引擎
- 用戶/組織管理
表單系統(tǒng)主要解決的問題是表單的設(shè)計(jì)以及表單數(shù)據(jù)的存儲(chǔ)/提取楞捂。在早年一個(gè)很好的可視化 HTML 設(shè)計(jì)器可以解決大部分問題,而如今已經(jīng)有更多可用的方案可供選擇趋厉。
- 表單系統(tǒng)的最大難度在于提供可供交互的類 HTML 設(shè)計(jì)器寨闹,并允許終端用戶自由地設(shè)計(jì)表單的樣式。這些用戶往往對(duì)于計(jì)算機(jī)原理了解并不深入君账。
- 早年比較常見的方案是基于 Eclipse 開發(fā)一個(gè)工作流設(shè)計(jì)平臺(tái)繁堡,其核心原理是對(duì) Eclipse Web Developer Tools 的二次開發(fā)提供表單設(shè)計(jì)器。
- OA 系統(tǒng)將表單設(shè)計(jì)器產(chǎn)生的數(shù)據(jù)進(jìn)行存儲(chǔ)杈绸,在需要時(shí)按照設(shè)計(jì)器設(shè)計(jì)的樣式重新展現(xiàn)并填充具體數(shù)據(jù)帖蔓。
流程引擎,解決的主要問題是提供一個(gè)統(tǒng)一的模式瞳脓,讓企業(yè)可以設(shè)計(jì)自己的流程塑娇。
- 在流程設(shè)計(jì)中比較典型的場(chǎng)景有:加簽、會(huì)簽劫侧、順序流程埋酬、子流程哨啃、并行流程等。
- 在工作流領(lǐng)域也存在很多成熟的解決方案写妥,如:Activiti拳球、Flowable、jBPM珍特。 本文不再詳細(xì)展開祝峻。
CloudDM Team 在工單流程的設(shè)計(jì)上簡(jiǎn)化了技術(shù)負(fù)擔(dān),其核心只關(guān)注審批的 發(fā)起 和 審批結(jié)果扎筒, 讓外部 OA 系統(tǒng)以更加專業(yè)的角度來負(fù)責(zé)工單流轉(zhuǎn)工作莱找,這樣做有以下好處:
- 專業(yè)的事情專業(yè)系統(tǒng)來負(fù)責(zé),減輕技術(shù)負(fù)擔(dān)嗜桌,提升整個(gè)系統(tǒng)的穩(wěn)定性奥溺。
-
可以接入用戶已有 OA 系統(tǒng),從而和用戶的 IT 系統(tǒng)結(jié)合更加緊密骨宠。
總結(jié)
本文提出了團(tuán)隊(duì)使用數(shù)據(jù)庫(kù)面臨的問題以及問題的后果浮定,介紹了行業(yè)中解決問題的常用手段,及 CloudDM Team 在眾多產(chǎn)品中的獨(dú)特優(yōu)勢(shì)层亿。如果您感覺本文有所收獲桦卒,歡迎前來試用。