使用mysql做saas_一种SaaS企业平台数据库系统及其连接方法与流程
本發明屬于數據庫領域,尤其涉及一種SaaS企業平臺數據庫及其連接方法。
背景技術:
SaaS是Software-as-a-Service(軟件即服務)的簡稱,隨著互聯網技術的發展和應用軟件的成熟,在21世紀開始興起的一種完全創新的軟件應用模式。它與“on-demand software”(按需軟件),the application service provider(ASP,應用服務提供商),hosted software(托管軟件)所具有相似的含義。它是一種通過Internet提供軟件的模式,廠商將應用軟件統一部署在自己的服務器上,客戶可以根據自己實際需求,通過互聯網向廠商定購所需的應用軟件服務,按定購的服務多少和時間長短向廠商支付費用,并通過互聯網獲得廠商提供的服務。用戶不用再購買軟件,而改用向提供商租用基于Web的軟件,來管理企業經營活動,且無需對軟件進行維護,服務提供商會全權管理和維護軟件,軟件廠商在向客戶提供互聯網應用的同時,也提供軟件的離線操作和本地數據存儲,讓用戶隨時隨地都可以使用其定購的軟件和服務。對于許多小型企業來說,SaaS是采用先進技術的最好途徑,它消除了企業購買、構建和維護基礎設施和應用程序的需要。
傳統的SaaS數據庫一般采用大型數據庫(ORACLE、DB2、SYBASE等),各企業間的數據采用表字段companyId的方式進行隔離,因各企業間業務不同,導致個性化定制開發困難,開發與維護高等問題,
技術實現要素:
為了解決現有技術中的上述問題,本發明提供了一種SaaS企業平臺數據庫及其連接方法。
本發明采用的技術方案具體如下:
一種SaaS企業平臺數據庫系統,包括中心服務器和多個數據庫服務器,其中,所述中心服務器上具有中心庫,所述數據庫服務器上具有企業庫,所述中心庫用于存儲企業的注冊信息,在企業注冊后調用創建初始化數據庫服務,在數據庫服務器上同步產生企業庫和表結構;當企業A的用戶需要使用數據庫時,其使用客戶端連接中心庫,并通過中心庫與企業A庫所在的數據庫服務器A建立加密連接,具體過程包括:
(1)企業A為其下屬的用戶生成密碼,設所述用戶的賬號為User,則該用戶的密碼PW通過下式計算:
PW=Encode(E(PrivateKeyA,User||Auth))
其中,PrivateKeyA是所述企業A的私鑰,Encode是Base64編碼函數,Auth是企業A給予該用戶的對數據庫的訪問權限;E為加密函數,其使用函數的第一個參數作為密鑰,對第二個參數進行加密;
(2)將所述密碼PW拆分成PW1和PW2兩部分,PW1由用戶保存,PW2保存在用戶使用的客戶端中;
(3)用戶使用客戶端連接中心服務器,并在客戶端中輸入PW1以及用戶賬號User,客戶端組合PW1和PW2以獲得用戶密碼PW;
(4)所述客戶端使用中心庫數字證書的公鑰加密PW,將加密結果和用戶賬號User發送給中心服務器;
(5)中心服務器上的中心庫接收到該加密結果后,使用其私鑰解密該加密結果,獲得PW;
(6)中心庫計算U=D(PublicKeyA,Decode(PW)),判斷U的前K個字符與User是否相等,如果不相等,則拒絕客戶端的連接,方法結束;如果相等,則客戶端認證通過,中心庫向客戶端返回認證通過消息,同時中心庫將U去除前K個字符后剩余的部分作為該用戶的數據庫訪問權限Auth;其中K是User的長度,PublicKeyA是企業A的公鑰,Decode是Base64解碼函數;D是與E相對應的解密函數,其使用函數的第一個參數作為密鑰,對第二個參數進行解密;
(7)所述客戶端在接收到認證通過消息后,隨機生成一個對稱加密密鑰Key,將該密鑰Key用中心庫數字證書公鑰加密后,發送給中心服務器;
(8)中心庫將接收到的加密結果EncKey進行解密,獲得密鑰Key,將該密鑰Key、訪問權限Auth以及客戶端的網絡地址發送給企業A庫所在的數據庫服務器A;
(9)所述數據庫服務器A基于該密鑰Key,與客戶端建立加密連接,并基于所述訪問權限Auth接收該客戶端的數據庫訪問。
進一步地,對于數據庫表升級操作,由中心庫記錄最新庫版本號和最新庫的數據庫表結構,當企業A的用戶登錄企業A庫后,對比中心庫和企業A庫的版本號,如果發現企業A庫的版本比中心庫低,則觸發升級庫腳本,同步更新企業A庫的版本與中心庫一致。
進一步地,其特征在于,中心庫中的企業注冊信息包括企業的數字證書。
進一步地,其特征在于,所述加密函數E和解密函數D使用的是RSA算法或者橢圓曲線算法。
進一步地,其特征在于,將PW的前N個字符作為PW1,剩余字符作為PW2,所述N是預定義的長度。
與上述系統相應的,本發明還提供了一種SaaS企業平臺數據庫系統的連接方法。
本方法的有益效果為:方便企業定制自己的數據庫,在保證安全性的前提下,企業具有了更大的靈活性,可以自行控制其下屬的用戶,而無需進行系統注冊。
【附圖說明】
此處所說明的附圖是用來提供對本發明的進一步理解,構成本申請的一部分,但并不構成對本發明的不當限定,在附圖中:
圖1是本發明數據庫系統的連接關系圖。
【具體實施方式】
下面將結合附圖以及具體實施例來詳細說明本發明,其中的示意性實施例以及說明僅用來解釋本發明,但并不作為對本發明的限定。
本發明的SaaS企業平臺數據庫系統為每個企業都提供一個單庫,從而實現單企業單庫的結構。如附圖1所示,系統中具有一個中心庫,每個企業在中心庫注冊賬號,產生注冊信息后,中心庫調用創建初始化數據庫服務,同步產生該企業的庫和表結構。所述中心庫位于一個中心服務器上,而企業庫位于其他的數據庫服務器上,不同企業庫可以位于不同的數據庫服務器上,也可以位于同一數據庫服務器上。
所述中心庫除了存儲企業的注冊信息外,還可將企業用戶的操作由中心庫路由到相應的企業庫進行處理。對于數據庫表升級操作,可采用中心庫中記錄最新庫版本號和最新庫的數據庫表結構,當企業A的用戶登錄企業A庫后,對比中心庫和企業A庫的版本號,如果發現企業A庫的版本比中心庫低,則觸發升級庫腳本,同步更新企業A庫的版本與中心庫一致。
由于中心庫存儲了各個企業的注冊信息,因此中心庫也是作為企業用戶登錄和連接數據庫的中心點。企業用戶在使用客戶端連接該數據庫系統時,首先是連接中心庫,然后通過中心庫登錄,從而再連接與訪問相應的企業庫。下面對企業A為例,對本發明的上述連接過程進行詳細說明。
首先,所述中心庫和每個企業都有各自的數字證書和相應的私鑰,可以使用該私鑰和數字證書中的公鑰進行加解密操作。中心庫中的企業注冊信息就包括了企業的數字證書。
設加密函數為E(key,Data),即使用預設的加密算法和密鑰key,對數據Data進行加密,從而得到Data的加密結果;設解密函數為D(Deckey,Enc),即使用預設的解密算法和密鑰key,對密文Enc進行解密,從而得到解密結果。優選的,所述加密和解密算法為RSA算法或者橢圓曲線算法。以下說明都使用這兩個函數的定義。
(1)企業A為其下屬的用戶生成密碼,設所述用戶的賬號為User,則該用戶的密碼PW通過下式計算:
PW=Encode(E(PrivateKeyA,User||Auth))
其中,PrivateKeyA是所述企業A的私鑰,Encode是Base64編碼函數。
Auth是企業A給予該用戶的對數據庫的訪問權限,符號“||”表示將兩個字符串連接。
(2)將所述密碼PW拆分成PW1和PW2兩部分。
優選的,將PW的前N個字符作為PW1,剩余字符作為PW2。所述N是預定義的長度,優選的,N=8。
PW1作為用戶個人密碼,由用戶自行記憶;PW2則作為客戶端密碼,保存在用戶使用的客戶端中,可以使用現有的一些安全保存方式來保持PW2。
(3)用戶使用客戶端連接中心服務器,并在客戶端中輸入PW1以及用戶賬號User,客戶端組合PW1和PW2以獲得用戶密碼PW。
所述組合過程就是步驟2中拆分過程的逆過程。
(4)客戶端使用中心庫數字證書的公鑰加密PW,將加密結果和用戶賬號User發送給中心服務器。
具體地,客戶端計算EncPW=E(PublicKeyCenter,PW),獲得PW的加密結果EncPW。其中,PublicKeyCenter是中心庫的公鑰。
(5)中心服務器上的中心庫接收到該加密結果后,使用其私鑰解密該加密結果,獲得PW。
具體地,中心庫計算PW=D(PrivateKeyCenter,EncPW)。其中,PrivateKeyCenter是中心庫的私鑰。
(6)中心庫計算U=D(PublicKeyA,Decode(PW)),判斷U的前K個字符與User是否相等,如果不相等,則拒絕客戶端的連接,方法結束;如果相等,則客戶端認證通過,中心庫向客戶端返回認證通過消息,同時中心庫將U去除前K個字符后剩余的部分作為該用戶的數據庫訪問權限Auth。
其中K是User的長度,PublicKeyA是企業A的公鑰,Decode是Base64解碼函數。步驟6的過程實際上是步驟1中計算公式的逆過程,因此可以驗證客戶端上傳的賬號密碼是否是企業A頒發,同時獲得訪問權限Auth。通過這樣的驗證方式,企業A可以自主生成用戶賬號、密碼和權限,而無需在服務器側對用戶進行注冊用戶,在保證安全性的同時,保持了企業的自主靈活性。
(7)客戶端在接收到認證通過消息后,隨機生成一個對稱加密密鑰Key,將該密鑰Key用中心庫數字證書公鑰加密后,發送給中心服務器。
具體地,客戶端計算Key的加密結果EncKey,即
EncKey=E(PublicKeyCenter,Key)。
所述密鑰Key作為客戶端與企業A庫之間的通信密鑰,基于該通信密鑰可建立兩者間的加密連接。
(8)中心庫將接收到的加密結果EncKey進行解密,獲得密鑰Key,將該密鑰Key、訪問權限Auth以及客戶端的網絡地址發送給企業A庫所在的數據庫服務器A。
具體地,中心庫計算Key=D(PrivateKeyCenter,EncKey),獲得該密鑰,再將密鑰傳輸給數據庫服務器A。此外,由于客戶端與中心服務器建立了網絡連接,因此中心服務器可以獲得客戶端的網絡地址。
通常情況下,作為SaaS平臺,內部服務器之間的通信都是安全的,或者同處于一個內部網絡內,或者具有安全信道,因此可以安全傳輸數據。
(9)所述數據庫服務器A基于該密鑰Key,與客戶端建立加密連接,并基于所述訪問權限Auth接收該客戶端的數據庫訪問。
這一步驟由數據庫服務器A主動發起建立加密連接,因此客戶端無需事先知道企業A所對應的數據庫服務器。
以上所述僅是本發明的較佳實施方式,故凡依本發明專利申請范圍所述的構造、特征及原理所做的等效變化或修飾,均包括于本發明專利申請范圍內。
總結
以上是生活随笔為你收集整理的使用mysql做saas_一种SaaS企业平台数据库系统及其连接方法与流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python类加载器_利用Python反
- 下一篇: adapt和adopt的区别_“适应”是