MySQL數據克隆的用戶權限設計
最近完成了初版的數據邏輯備份恢復的功能,和業務方做了一些交流和演示,發現他們對于備份恢復側的一些東東還是不夠敏感,因為因為一些術語的差異,他們不大理解所謂的備份恢復能干什么,所以我們做了一些討論,最后決定改為“數據克隆”。
1.產品定位:
數據克隆是高效,安全的從通過從線上指定數據庫/表克隆數據,從而快速構建虛擬環境,提供更高效的數據交付服務。從效率上可以支持業務自助提取數據,分鐘級快速構建環境,可以通過workbench等工具訪問數據,整個過程基本不需要DBA手工操作介入。從安全上,支持數據操作日志審計,提供庫/表訪問過濾,隨機虛擬環境和臨時密碼交付,此外會對虛擬環境使用時長進行限制,盡可能保證數據的使用安全。
2.適用場景:
目前數據克隆功能支持如下的場景:
1)線上配置數據的快速查看
2)提取線上表結構
3)日志數據查詢,線上大表
4)線上SQL異常,快速構建虛擬環境進行SQL優化,壓測等
5)指定大表的變更和數據操作影響評估
6)數據補丁合并,基于業務邏輯的數據操作和數據補丁整理
整個實現的過程有很多考慮的細節,不過還是在設計和實現中由同事和我一并解決了。
到了交付的時機了,我們想到還有一個關鍵的地方需要補充,那就是數據庫和用戶的權限關聯,也就意味著每個人可以看到和使用的數據庫應該是不大一樣的,因為做一些權限隔離,所以接下來我會說說數據克隆方向的用戶權限設計。
數據克隆的用戶權限設計是面向業務使用的基礎功能,目前對于用戶權限的設計可以基于數據庫級別。
權限的實現可以分兩個階段來完成:
1)數據初始化階段,可以使用用戶組批量初始化的方式,部分數據可以從工單歷史中獲取
2)定制化配置階段,根據業務需求變更和組織架構調整進行數據庫和用戶映射關系的微調
其中,
實例信息和庫信息可以基于數據庫基線表 mysql_db_baseline
用戶組信息和用戶信息可以基于用戶表 user_info
數據庫-用戶關系表需要新建,表名為:mysql_db_user_rel(id,ip_addr,db_port,db_name,user_id)
需要實現四個子功能:
1)數據庫-用戶關系映射,實現單一數據庫和單一用戶的關系,在關系表中為一條記錄
2)數據庫-用戶關系列表,通過數據庫維度(IP+端口+數據庫名)查看相關用戶列表信息
3)數據庫-用戶組關系映射,實現單一數據庫和單一用戶組的關系,具體邏輯為:
a) 輸入數據庫信息(IP+端口+數據庫名),UserID
b) 根據UserID關聯用戶組信息
c) 根據用戶組信息得到組內的UserID列表
d) 循環用戶列表,根據數據庫-用戶關系建立映射,需要考慮重復記錄的過濾
4)實例列表信息,根據用戶UserID得到歸屬的實例列表,具體邏輯為:
a) 輸入UserID
b) 根據UserID在數據庫-用戶關系表中得到相關的數據庫列表,進一步過濾得到實例IP+端口信息
本文轉載自微信公眾號「楊建榮的學習筆記」,可以通過以下二維碼關注。轉載本文請聯系楊建榮的學習筆記公眾號。