使用Shell腳本進行MySql權(quán)限修改的實現(xiàn)教程
背景:
原先數(shù)據(jù)配置文件中有bind-address=127.0.0.1,注釋掉此配置后,原數(shù)據(jù)庫中默認帶%root的權(quán)限,現(xiàn)在需要通過腳本實現(xiàn)白名單列表中的ip添加權(quán)限允許訪問數(shù)據(jù)庫,白名單之外的ip沒有權(quán)限訪問數(shù)據(jù)庫。
以下是過程中記錄的一些問題。
問題
1、能否直接通過將%@root替換成白名單中ip@root權(quán)限?
答:不能。
在 MySQL 中,無法將 %@root 直接更新為 whitelisted_ip@root 的權(quán)限。權(quán)限授予是基于用戶和主機的,而不是根據(jù)特定的用戶和權(quán)限項。這意味著不能直接更改權(quán)限項的主機部分。
相反,應(yīng)該創(chuàng)建一個新的用戶,并僅授予該用戶特定主機的訪問權(quán)限。然后,撤銷原始的 %@root 用戶的權(quán)限,以確保只有指定白名單中的 IP 地址能夠訪問數(shù)據(jù)庫。
因此,在 MySQL 中創(chuàng)建新用戶并設(shè)置僅限白名單 IP 地址訪問數(shù)據(jù)庫,然后刪除默認的 %root 用戶權(quán)限,是最安全和推薦的做法。
2、WITH GRANT OPTION 參數(shù)使用
WITH GRANT OPTION 是 MySQL 權(quán)限系統(tǒng)中的一種選項,它允許授予的用戶將他們擁有的權(quán)限授予其他用戶,即委派權(quán)限。具體而言,當你向用戶授予權(quán)限時,可以選擇是否包括 WITH GRANT OPTION,其含義如下:
授予權(quán)限:授予權(quán)限意味著該用戶可以執(zhí)行被授予的操作(例如 SELECT、INSERT、UPDATE 等)。
WITH GRANT OPTION:如果同時指定了 WITH GRANT OPTION,則被授予權(quán)限的用戶除了可以執(zhí)行這些操作外,還可以將相同的權(quán)限授予其他用戶,即委派權(quán)限。
換句話說,具有 WITH GRANT OPTION 權(quán)限的用戶可以再次使用 GRANT 命令將他們擁有的權(quán)限授予給其他用戶,而不需要直接訪問權(quán)限的所有者。這樣的設(shè)置可以在需要委派權(quán)限給其他用戶時非常有用。但同時也要注意,授予 WITH GRANT OPTION 權(quán)限可能增加安全風險,因為權(quán)限可能會被濫用或誤用。
因此,在為用戶分配權(quán)限時,應(yīng)謹慎考慮是否使用 WITH GRANT OPTION,并確保了解委派權(quán)限可能帶來的安全影響。
3、執(zhí)行 REVOKE ALL PRIVILEGES ON . FROM ‘root’@‘%’;后,為什么查詢user表依然包含此用戶信息?
當使用 REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%'; 命令來撤銷 root@% 用戶的所有權(quán)限時,這只是取消了該用戶對數(shù)據(jù)庫的訪問權(quán)限,并沒有刪除該用戶的賬戶信息。因此,即使撤銷了 root@% 的權(quán)限,仍然可以在 mysql.user 表中查詢到該用戶的記錄。
要完全刪除 root@% 用戶的賬戶信息,可以使用以下步驟:
-- 使用 REVOKE 命令撤銷 root@% 用戶的所有權(quán)限: REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%'; FLUSH PRIVILEGES;
--- 刪除 root@% 用戶的賬戶: DROP USER 'root'@'%';
通過上述步驟,可以撤銷 root@% 用戶的所有權(quán)限,并從 mysql.user 表中刪除該用戶的賬戶信息。
請注意,刪除 root@% 用戶可能會影響到數(shù)據(jù)庫的管理和維護,因此在執(zhí)行此操作之前,請確保有其他具備管理員權(quán)限的用戶賬戶。
4、部分細節(jié)參考
添加用戶權(quán)限時如果用戶權(quán)限不存在才添加;
刪除用戶權(quán)限時如果用戶權(quán)限存在則刪除;
不做添加刪除判斷,可能會執(zhí)行報錯。
數(shù)據(jù)連接相關(guān)信息存儲在一個配置文件中test_config.sh;
test_config.sh文件參考
#!/bin/bash export DBCMD=/usr/local/Test/database/bin/mysql export DBUSER=root export DBPWD=123456 export DBHOST=127.0.0.1 export DBPORT=3306 export WHITEIP=192.168.22.1
test_permission.sh文件參考
#!/bin/bash
pushd `dirname $0` >/dev/null 2>&1
. test_config.sh
# 檢查白名單用戶權(quán)限是否存在
existing_user=`$DBCMD -u$DBUSER -p$DBPWD -P$DBPORT -h$DBHOST -Ns -e "SELECT user FROM mysql.user WHERE user='root' AND host='${WHITEIP}'"`
if [ -z "$existing_user" ]; then
# 如果用戶權(quán)限不存在,則添加權(quán)限
$DBCMD -u$DBUSER -p$DBPWD -P$DBPORT -h$DBHOST -e "create user 'root'@'${WHITEIP}' identified by '123456';grant all privileges on *.* to 'root'@'${WHITEIP}' identified by '123456' with GRANT OPTION;flush privileges;"
# 記錄時間、輸出到日志文件
echo `date "+%F %T"` "${WHITEIP} grant all privileges" >> ../test.log
else
echo `date "+%F %T"` "${WHITEIP} is exist, no need to add" >> ../test.log
fi
# 檢查root@%用戶權(quán)限是否存在
existing_user=`$DBCMD -u$DBUSER -p$DBPWD -P$DBPORT -h $DBHOST -Ns -e "SELECT user FROM mysql.user WHERE user='root' AND host='%'"`
if [ -z "$existing_user" ]; then
echo `date "+%F %T"` "root@% is not exist, no need to del" >> ../test.log
else
# 如果用戶權(quán)限存在,則刪除權(quán)限
$DBCMD -u$DBUSER -p$DBPWD -P$DBPORT -h$DBHOST -e "REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'root'@'%';DROP USER 'root'@'%';flush privileges;"
echo `date "+%F %T"` "root@% rmvoke all privileges" >> ../test.log
fi
popd >/dev/null 2>&1
到此這篇關(guān)于使用Shell腳本進行MySql權(quán)限修改的實現(xiàn)教程的文章就介紹到這了,更多相關(guān)Shell腳本修改MySql權(quán)限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux下perl操作mysql數(shù)據(jù)庫(需要安裝DBI)
有時候需要perl操作mysql數(shù)據(jù)庫,可以通過DBI實現(xiàn),需要的朋友可以參考下2012-05-05
MySQL提示:The server quit without updating
今天網(wǎng)站web頁面提交內(nèi)容到數(shù)據(jù)庫,發(fā)現(xiàn)出錯了,一直提交不了,數(shù)找了下原因,發(fā)現(xiàn)數(shù)據(jù)寫不進去!第一反應(yīng),重啟mysql數(shù)據(jù)庫,一直執(zhí)行中,停止不了也啟動不了,直覺告訴我磁盤滿了 !2014-04-04
Windows系統(tǒng)中完全卸載MySQL數(shù)據(jù)庫實現(xiàn)重裝mysql
這篇文章主要介紹了Windows系統(tǒng)中完全卸載MySQL數(shù)據(jù)庫實現(xiàn)重裝mysql數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧2018-05-05
MySQL實現(xiàn)分詞搜索(FULLTEXT)的方法
這篇文章主要介紹了MySQL實現(xiàn)分詞搜索(FULLTEXT)的方法,包括全文搜索的簡單使用,建表添加FULLTEXT索引使用該技術(shù)非常簡單,首先需要有一張表,我建立了一張圖書表并插入了兩條數(shù)據(jù),需要的朋友可以參考下2022-10-10
mysql的bigint?和?bigint(20)?主鍵自增的區(qū)別解析
bigint和bigint(20)在MySQL中作為主鍵自增時,功能完全相同,本文介紹mysql的bigint和bigint(20)主鍵自增的區(qū)別,感興趣的朋友跟隨小編一起看看吧2026-01-01
MySQL如何選擇Datetime與Timestamp存儲時間
本文主要介紹了MySQL如何選擇Datetime與Timestamp存儲時間,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2026-04-04
sphinxql如何得到結(jié)果數(shù)及show meta的詳細說明
想用sphinxql只得到結(jié)果數(shù)。跟mysql里的count(*)一樣2013-02-02

