MySQL許可權開通的設計方案

2021-09-28 11:44:52 字數 2984 閱讀 7921

mysql中的許可權管理和其他資料庫還是有很大的不同,它能夠實現幾種很特別的許可權場景:

幾個人公用乙個賬號,看起來使用者名稱相同,密碼相同,但是許可權缺可以不同

幾個人用同乙個賬號,使用者名稱相同,但是密碼可以不同,許可權可以相同

幾個人用同乙個賬號,使用者名稱相同,但是密碼可以不同,許可權可以不同。

主要的原因就在於mysql的許可權認證中是按照使用者和主機名兩個維度結合來考量的。

所以我們的工作中,如果許可權指定的太細,到了ip級別,其實需要建立的使用者太多,所以我們很多時候是基於乙個網段來建立,比如使用者ip是192.168.3.100,那麼我們可能會建立192.168.3.%的使用者,這樣後續要開通許可權就能方便很多,從許可權的管理來說,可能需要補充的就是系統級別的防火牆許可權了。

這個看起來蠻簡單的工作,一旦陷入瑣碎的設定和流程之中,就會給我們帶來很多的困擾和手工操作的複雜度,大體有幾類體驗比較深的痛點:

開通許可權需要手工構造很多基本的sql語句,看起來沒有技術含量

如果指定一些表名,比如指定10個表,開通許可權的時候可能許可權語句就需要10條。

如果有多個ip要開通許可權,那麼我們需要手工構造很多重複繁瑣的許可權語句

每次開通許可權的時候,對於密碼都是乙個頭疼的格式,密碼太簡單不好,輸入的多一些,手工輸入的時候其實會發現密碼好像不夠隨機。

測試環境和生產環境的使用者應該按照規範,現在可能就壓根沒有遵守規範。

所以實際接觸一些場景,自己手工做了一些業務之後,我發現這個地方確實得改進一下了。

整體的思路就是根據輸入的資訊自動生成匹配的sql語句,人工初步審核和過濾,確認後執行。如果梳理需求,大體就會有一些功能點需要完善,這些通過手工眼裡去鑑別還是有些費神的。整體來說是有兩個大的功能需要做,乙個是開通許可權,乙個是查詢許可權。

開通許可權的部分需要的改進如下:

1. 根據客戶端ip資訊,取ip的前三段動態生成使用者

2. 根據輸入物件動態生成sql

3. 根據輸入許可權動態生成sql

4. 根據環境型別,檢查使用者名稱是否符合規範,根據業務匹配使用者名稱

5. 根據許可權型別,檢查使用者名稱是否符合規範

6. 幫助生成隨機密碼,轉儲密碼資訊到資料庫中

7. 輸入引數保證健壯性,自動過濾空格

查詢許可權的部分需要的改進如下:

1. 根據客戶端ip和埠在伺服器中得到許可權資訊列表

2. 根據使用者來查詢相應的許可權

進一步發掘需求,其實我們需要的基本資訊是下面的幾個引數:

環境型別: 測試開發環境,線上環境

使用者名稱:

密碼:許可權型別:

資料庫:

物件:客戶端列表:

def handle_grant():

# client ip list

ipaddr_list = '192.168.10.202,192.168.10.203,   192.168.3.20'

# username

username ='dev_user'

password = ''.join(random.sample(string.ascii_letters + string.digits, 15))

privilege_list = 'select,insert,delete'

database_list = 'test1,test2'

object_list = 'tab1,tab2,tab3'

env_type = 'test'

error_info =

if env_type == 'test':

if username.startswith("dev_") == 0 :

print(error_info)

return;

elif env_type == 'prod':

if username.startswith("prod") == 0:

print(error_info)

return;

print("aaa")

ipaddr_list = ipaddr_list.replace(' ', '')

print(ipaddr_list)

username_list =

for ipaddr in ipaddr_list.split(','):

tmp_ipaddr = '.'.join(ipaddr.split('.')[0:3])

if tmp_ipaddr not in username_list:

print(username_list)

create_user_sqls =

for host_prefix in username_list:

for sql in create_user_sqls:

print(sql)

grant_sqls =

for owner_db in database_list.split(','):

for obj in object_list.split(','):

for user_host in username_list:

print(grant_sqls)

for sql in grant_sqls:

print(sql)

handle_grant()

輸出如下:

192.168.10.202,192.168.10.203,192.168.3.20

['192.168.10', '192.168.3']

create user dev_user@'192.168.10.%' identified by 'srbgtniei0xduyz';

create user dev_user@'192.168.3.%' identified by 'srbgtniei0xduyz';

grant select,insert,delete on test2.tab3 to dev_user@'192.168.10.%';

grant select,insert,delete on test2.tab3 to dev_user@'192.168.3.%';

許可權設計方案

簡要介紹一下該許可權管理系統的特點,該系統功能上做到了靈活授權,操控細緻,許可權可以細到按鈕及超鏈級別,而且部署簡單,下面談談我自己的設計經驗。該系統主要功能如下 1 自定義操作動作 如增加 刪除 修改 審核等,不再是以前見過的那種粗粒度的 按模組分配許可權,或者稍微先進點的規定死某幾個操作了 2 ...

系統許可權設計方案

2008 06 04 b size large 系統許可權設計方案 size b b size large size b 關鍵字 設計思想 系統設計許可權管理分為 人員管理 角色管理 模組管理 其實有這樣一些概念 主體 使用者和角色可以稱為主體。資源 就是可以進行crud的物件。許可權 就是對資源的...

使用者許可權系統設計方案

鍾峰 2004年10月 版本 1.0.0 本文介紹乙個應用於 企業應用通用的使用者許可權系統的設計框架,其設計思想與主要文件 自 sunwu software studio 的 isecuritymanager 產品。本指南適用於體系結構設計人員和開發人員。安全始終是可信賴的企業應用的基石。在企業應...