一、背景
之前待的幾個公司,數(shù)據(jù)庫、服務器權(quán)限都是給所有后端直接拉滿的,但也會出現(xiàn)員工離職的情況,每次有人離職時都需要改數(shù)據(jù)庫密碼、服務器密碼。
每次密碼修改后得告知所有開發(fā)修改本地密碼,但這樣的事情也不是經(jīng)常發(fā)生,公司雖小但很穩(wěn)定。
假設你所待的公司是一個開發(fā)非常多的公司,有可能你待了一年還沒認識全,人員流動的速度也非常快,這時上面那種方案的執(zhí)行成本就非常高了。
若此時把這個問題拋給你,讓你解決你會有什么方案?
給大家介紹兩種方案,一種傳統(tǒng)方案另一種是通過SSH來實現(xiàn)的。
二、傳統(tǒng)方案
MySQL版本:8.0.26
其中最簡單的方案就是給每個人在數(shù)據(jù)庫添加一個賬號,具體步驟如下:
創(chuàng)建新用戶
create user "kaka"@"%" identified by 'qwerty123456';
其中kaka為自定義的用戶名;%為登錄域名,host為'%'時表示為 任意IP,為localhost時表示本機,或者填寫指定的IP地址;qwerty123456為密碼
為用戶授權(quán)
grant all privileges on kaka.* to "kaka"@"%" with grant option;
或
grant all on *.* to "kaka"@"%";
其中kaka.*,kaka為數(shù)據(jù)名,*為所有表,如果想授權(quán)全部表就把kaka.*寫成*.*,當然這里是以開發(fā)庫為基礎的,所有的權(quán)限都得給。當前也可以給予部分權(quán)限。
刷新權(quán)限
flush privileges;
使用用戶名:kaka進行登錄
發(fā)現(xiàn)kaka用戶只有兩個庫,kaka庫就是授權(quán)的庫,當切換系統(tǒng)庫時發(fā)現(xiàn)是沒有權(quán)限的。
在切到kaka庫,是可以做正常的curd操作的
給予部分權(quán)限
grant update on kaka.* to "kaka"@"%";
flush privileges;
若想給多個權(quán)限,則逗號隔開即可,update,select,insert ....,執(zhí)行完切記需要刷新權(quán)限,否則不會生效
撤銷全部權(quán)限
這塊有點小插曲,當執(zhí)行撤銷命令后報了這樣一個錯
Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
查閱了一下官方文檔,原因是由于root用戶沒有SYSTEM_USER權(quán)限,把權(quán)限加入后即可解決
grant system_user on *.* to 'root';
revoke all privileges ,grant option from kaka;
或
revoke all privileges on kaka.* from kaka;
flush privileges;
撤銷部分權(quán)限
revoke select on kaka.* from kaka;
kaka.*為表名,kaka為用戶名
員工離職刪除用戶即可
drop from kaka;
kaka 為用戶名
嗯,成功的把MySQL權(quán)限給復習了一遍.....
三、通過SSH隧道連接MySQL數(shù)據(jù)庫
準備工作
主機名角色IP端口kaka1MySQL主機47.93.12.2043306kaka2遠程服務器8.142.40.20233888
修改MySQL主機僅允許遠程服務器連接
use mysql;
update user set host='8.142.40.202' where user = "root";
此時在MySQL主機服務器是直接登錄不了的
配置SSH連接MySQL主機
在遠程主機執(zhí)行
ssh -fN -L33888:47.93.12.204:3306 [email protected]
在使用SSH連接使用時發(fā)現(xiàn)部分人員說是連接一直在斷,影響了正常開發(fā),只需要加上下面這個參數(shù)重新執(zhí)行即可,這個參數(shù)是每60秒發(fā)送一個KeepAlive請求,保證終端不會因為超時空閑而斷開連接
ssh -o ServerAliveInterval=60 -fN -L33888:47.93.12.204:3306 [email protected]
注意前邊是遠程服務器 后邊是遠程主機的服務器賬號、服務器地址
命令執(zhí)行完成后,可以通過命令
mysql -h 127.0.0.1 -P 33888 -uroot -p
密碼是MySQL服務器的 MySQL密碼
四、本地開發(fā)連接
上述通過兩臺服務器給大家做了演示,接下來看看開發(fā)人員如何連接開發(fā)數(shù)據(jù)庫
同樣在本地也執(zhí)行命令
ssh -fN -L3306:47.93.12.204:3306 [email protected]
在host配置文件中進行域名映射
// 127.0.0.1 MySQL服務器地址
127.0.0.1 8.142.40.202
使用Navicat進行連接
可以看到已經(jīng)連接上了
這樣就強制讓所有開發(fā)人員通過SSH來連接MySQL,當有一個開發(fā)離職后,只需要刪除對應的服務器賬號即可
五、限制linux用戶登錄
你肯定也想到了,通過SSH連接使用的服務器賬號密碼,那么就意味著所有開發(fā)者都可以用過自己的賬號密碼進行登錄服務器。
上有政策,下有對策,接下來看看如何限制用戶登錄服務器。
例如現(xiàn)在添加了用戶niuniu,此時該用戶是肯定可以連接到服務器的
可以看到當前用戶通過Xsheel連接上了服務器,服務器權(quán)限還是給部分人開通比較好,接下來就來限制該用戶登錄服務器
執(zhí)行命令
usermod -s /sbin/nologin niuniu
用戶niuniu通過Xsheel登錄服務器,可以看到返回當前賬號不可用,說明我們想要的結(jié)果已經(jīng)有了
再看看本地Navicat連接是否正常
截止到這里就已經(jīng)完成了所有的安全措施。
六、擴展一:WITH GRANT OPTION
這個參數(shù)是可選的,如果不加,那這句話到這就結(jié)束了,這個用戶就是一級,他不能再去建子用戶了,如果給了,就代表可以建子賬號,當然子用戶能分出去的權(quán)限僅限他自己有的權(quán)限
注意一點,這里的操作只能分配給已有的賬戶,創(chuàng)建新賬戶需要另外的權(quán)限 并且,還得有GRANT權(quán)限,不然的話就算有這個權(quán)限但是沒有執(zhí)行這個權(quán)限的權(quán)限
七、擴展二:Linux用戶操作
添加用戶
useradd {username}
刪除用戶
vipw
進去之后刪除對應的用戶名即可
groupdel {username}
rm -rf /home/{username}
設置密碼
passwd {username}
需要輸入兩遍,注意
八、總結(jié)
本文給大家介紹兩種應對開發(fā)者離職后,數(shù)據(jù)庫權(quán)限收回的方案。一種是通過MySQL本身字段的權(quán)限、另一種是通過SSH來連接,目前咔咔所在的公司是通過SSH進行連接的。
在介紹這兩種方案時發(fā)現(xiàn)了很多可以擴展的知識點,也一并寫了出來,當你看這篇文章時就不用再一次進行查資料了。






