大家好,我是咔咔 不期速成,日拱一卒
一西设、背景
之前待的幾個公司瓣铣,數(shù)據(jù)庫、服務(wù)器權(quán)限都是給所有后端直接拉滿的贷揽,但也會出現(xiàn)員工離職的情況棠笑,每次有人離職時都需要改數(shù)據(jù)庫密碼、服務(wù)器密碼禽绪。
每次密碼修改后得告知所有開發(fā)修改本地密碼蓖救,但這樣的事情也不是經(jīng)常發(fā)生,公司雖小但很穩(wěn)定印屁。
假設(shè)你所待的公司是一個開發(fā)非常多的公司循捺,有可能你待了一年還沒認識全,人員流動的速度也非承廴耍快从橘,這時上面那種方案的執(zhí)行成本就非常高了。
若此時把這個問題拋給你础钠,讓你解決你會有什么方案恰力?
接下來給大家介紹兩種方案,一種傳統(tǒng)方案另一種是通過SSH來實現(xiàn)的旗吁。
二踩萎、傳統(tǒng)方案
MySQL版本:8.0.26
其中最簡單的方案就是給每個人在數(shù)據(jù)庫添加一個賬號,具體步驟如下:
創(chuàng)建新用戶
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">create user "kaka"@"%" identified by 'qwerty123456';
</pre>
其中kaka
為自定義的用戶名很钓;%
為登錄域名香府,host為'%'
時表示為 任意IP,為localhost
時表示本機码倦,或者填寫指定的IP地址回还;qwerty123456
為密碼
為用戶授權(quán)
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`grant all privileges on kaka.* to "kaka"@"%" with grant option;
或
grant all on . to "kaka"@"%";` </pre>
其中kaka.*
,kaka
為數(shù)據(jù)名,*
為所有表叹洲,如果想授權(quán)全部表就把kaka.*
寫成*.*
柠硕,當然這里是以開發(fā)庫為基礎(chǔ)的,所有的權(quán)限都得給运提。當前也可以給予部分權(quán)限蝗柔。
刷新權(quán)限
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">flush privileges;
</pre>
使用用戶名:kaka進行登錄
發(fā)現(xiàn)kaka用戶只有兩個庫,kaka庫就是授權(quán)的庫民泵,當切換系統(tǒng)庫時發(fā)現(xiàn)是沒有權(quán)限的癣丧。
在切到kaka庫,是可以做正常的curd操作的
[圖片上傳失敗...(image-bfe786-1660008288091)]
給予部分權(quán)限
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`grant update on kaka.* to "kaka"@"%";
flush privileges;` </pre>
若想給多個權(quán)限栈妆,則逗號隔開即可胁编,update,select,insert ....厢钧,執(zhí)行完切記需要刷新權(quán)限,否則不會生效
[圖片上傳失敗...(image-fdcce9-1660008288091)]
撤銷全部權(quán)限
這塊有點小插曲嬉橙,當執(zhí)行撤銷命令后報了這樣一個錯
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
</pre>
查閱了一下官方文檔早直,原因是由于root用戶沒有SYSTEM_USER權(quán)限,把權(quán)限加入后即可解決
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">grant system_user on *.* to 'root';
</pre>
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`revoke all privileges ,grant option from kaka;
或
revoke all privileges on kaka.* from kaka;
flush privileges;` </pre>
插銷部分權(quán)限
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">revoke select on kaka.* from kaka;
</pre>
kaka.*
為表名市框,kaka
為用戶名
員工離職刪除用戶即可
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">drop from kaka;
</pre>
kaka
為用戶名
嗯霞扬,成功的把MySQL權(quán)限給復(fù)習了一遍.....
三、通過SSH隧道連接MySQL數(shù)據(jù)庫
準備工作
主機名 | 角色 | IP | 端口 |
---|---|---|---|
kaka1 | MySQL主機 | 47.93.12.204 | 3306 |
kaka2 | 遠程服務(wù)器 | 8.142.40.202 | 33888 |
修改MySQL主機僅允許遠程服務(wù)器連接
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`use mysql;
update user set host='8.142.40.202' where user = "root";` </pre>
[圖片上傳失敗...(image-4cb267-1660008288090)]
此時在MySQL主機服務(wù)器是直接登錄不了的
[圖片上傳失敗...(image-4be7c8-1660008288090)]
配置SSH連接MySQL主機
在遠程主機執(zhí)行
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">ssh -fN -L33888:47.93.12.204:3306 root@8.142.40.202
</pre>
在使用SSH連接使用時發(fā)現(xiàn)部分人員說是連接一直在斷枫振,影響了正常開發(fā)喻圃,只需要加上下面這個參數(shù)重新執(zhí)行即可,這個參數(shù)是每60秒發(fā)送一個KeepAlive請求粪滤,保證終端不會因為超時空閑而斷開連接
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">ssh -o ServerAliveInterval=60 -fN -L33888:47.93.12.204:3306 root@8.142.40.202
</pre>
注意前邊是遠程服務(wù)器 后邊是遠程主機的服務(wù)器賬號斧拍、服務(wù)器地址
命令執(zhí)行完成后,可以通過命令
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">mysql -h 127.0.0.1 -P 33888 -uroot -p
</pre>
密碼是MySQL服務(wù)器的 MySQL密碼
[圖片上傳失敗...(image-ee655c-1660008288090)]
四杖小、本地開發(fā)連接
上述通過兩臺服務(wù)器給大家做了演示肆汹,接下來看看開發(fā)人員如何連接開發(fā)數(shù)據(jù)庫
同樣在本地也執(zhí)行命令
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">ssh -fN -L3306:47.93.12.204:3306 root@8.142.40.202
</pre>
在host配置文件中進行域名映射
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">// 127.0.0.1 MySQL服務(wù)器地址 127.0.0.1 8.142.40.202
</pre>
使用Navicat進行連接
[圖片上傳失敗...(image-d12dc3-1660008288090)]
可以看到已經(jīng)連接上了
[圖片上傳失敗...(image-5bfa36-1660008288090)]
這樣就強制讓所有開發(fā)人員通過SSH來連接MySQL,當有一個開發(fā)離職后窍侧,只需要刪除對應(yīng)的服務(wù)器賬號即可
五县踢、限制Linux用戶登錄
你肯定也想到了转绷,通過SSH連接使用的服務(wù)器賬號密碼伟件,那么就意味著所有開發(fā)者都可以用過自己的賬號密碼進行登錄服務(wù)器。
上有政策议经,下有對策斧账,接下來看看如何限制用戶登錄服務(wù)器。
例如現(xiàn)在添加了用戶niuniu
煞肾,此時該用戶是肯定可以連接到服務(wù)器的
[圖片上傳失敗...(image-5bba07-1660008288090)]
可以看到當前用戶通過Xsheel連接上了服務(wù)器咧织,服務(wù)器權(quán)限還是給部分人開通比較好,接下來就來限制該用戶登錄服務(wù)器
[圖片上傳失敗...(image-7e8785-1660008288090)]
執(zhí)行命令
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">usermod -s /sbin/nologin niuniu
</pre>
用戶niuniu
通過Xsheel登錄服務(wù)器籍救,可以看到返回當前賬號不可用习绢,說明我們想要的結(jié)果已經(jīng)有了
[圖片上傳失敗...(image-bbdd0f-1660008288090)]
再看看本地Navicat連接是否正常
[圖片上傳失敗...(image-d50d1-1660008288090)]
截止到這里就已經(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用戶操作
添加用戶
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">useradd {username}
</pre>
刪除用戶
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">`vipw
進去之后刪除對應(yīng)的用戶名即可
groupdel {username}
rm -rf /home/{username}` </pre>
設(shè)置密碼
<pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;">passwd {username}
</pre>
需要輸入兩遍耿战,注意
八蛋叼、總結(jié)
本文給大家介紹兩種應(yīng)對開發(fā)者離職后,數(shù)據(jù)庫權(quán)限收回的方案剂陡。一種是通過MySQL本身字段的權(quán)限狈涮、另一種是通過SSH來連接,目前咔咔所在的公司是通過SSH進行連接的鸭栖。
在介紹這兩種方案時發(fā)現(xiàn)了很多可以擴展的知識點歌馍,也一并寫了出來,當你看這篇文章時就不用再一次進行查資料了晕鹊。
“
堅持學習松却、堅持寫作、堅持分享是咔咔從業(yè)以來所秉持的信念溅话。愿文章在偌大的互聯(lián)網(wǎng)上能給你帶來一點幫助晓锻,我是咔咔,下期見飞几。
”