使用Shell腳本進行MySql權限修改的實現(xiàn)教程
背景:
原先數(shù)據(jù)配置文件中有bind-address=127.0.0.1,注釋掉此配置后,原數(shù)據(jù)庫中默認帶%root的權限,現(xiàn)在需要通過腳本實現(xiàn)白名單列表中的ip添加權限允許訪問數(shù)據(jù)庫,白名單之外的ip沒有權限訪問數(shù)據(jù)庫。
以下是過程中記錄的一些問題。
問題
1、能否直接通過將%@root替換成白名單中ip@root權限?
答:不能。
在 MySQL 中,無法將 %@root 直接更新為 whitelisted_ip@root 的權限。權限授予是基于用戶和主機的,而不是根據(jù)特定的用戶和權限項。這意味著不能直接更改權限項的主機部分。
相反,應該創(chuàng)建一個新的用戶,并僅授予該用戶特定主機的訪問權限。然后,撤銷原始的 %@root 用戶的權限,以確保只有指定白名單中的 IP 地址能夠訪問數(shù)據(jù)庫。
因此,在 MySQL 中創(chuàng)建新用戶并設置僅限白名單 IP 地址訪問數(shù)據(jù)庫,然后刪除默認的 %root 用戶權限,是最安全和推薦的做法。
2、WITH GRANT OPTION 參數(shù)使用
WITH GRANT OPTION 是 MySQL 權限系統(tǒng)中的一種選項,它允許授予的用戶將他們擁有的權限授予其他用戶,即委派權限。具體而言,當你向用戶授予權限時,可以選擇是否包括 WITH GRANT OPTION,其含義如下:
授予權限:授予權限意味著該用戶可以執(zhí)行被授予的操作(例如 SELECT、INSERT、UPDATE 等)。
WITH GRANT OPTION:如果同時指定了 WITH GRANT OPTION,則被授予權限的用戶除了可以執(zhí)行這些操作外,還可以將相同的權限授予其他用戶,即委派權限。
換句話說,具有 WITH GRANT OPTION 權限的用戶可以再次使用 GRANT 命令將他們擁有的權限授予給其他用戶,而不需要直接訪問權限的所有者。這樣的設置可以在需要委派權限給其他用戶時非常有用。但同時也要注意,授予 WITH GRANT OPTION 權限可能增加安全風險,因為權限可能會被濫用或誤用。
因此,在為用戶分配權限時,應謹慎考慮是否使用 WITH GRANT OPTION,并確保了解委派權限可能帶來的安全影響。
3、執(zhí)行 REVOKE ALL PRIVILEGES ON . FROM ‘root’@‘%’;后,為什么查詢user表依然包含此用戶信息?
當使用 REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%';
命令來撤銷 root@% 用戶的所有權限時,這只是取消了該用戶對數(shù)據(jù)庫的訪問權限,并沒有刪除該用戶的賬戶信息。因此,即使撤銷了 root@% 的權限,仍然可以在 mysql.user 表中查詢到該用戶的記錄。
要完全刪除 root@% 用戶的賬戶信息,可以使用以下步驟:
-- 使用 REVOKE 命令撤銷 root@% 用戶的所有權限: REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%'; FLUSH PRIVILEGES;
--- 刪除 root@% 用戶的賬戶: DROP USER 'root'@'%';
通過上述步驟,可以撤銷 root@% 用戶的所有權限,并從 mysql.user 表中刪除該用戶的賬戶信息。
請注意,刪除 root@% 用戶可能會影響到數(shù)據(jù)庫的管理和維護,因此在執(zhí)行此操作之前,請確保有其他具備管理員權限的用戶賬戶。
4、部分細節(jié)參考
添加用戶權限時如果用戶權限不存在才添加;
刪除用戶權限時如果用戶權限存在則刪除;
不做添加刪除判斷,可能會執(zhí)行報錯。
數(shù)據(jù)連接相關信息存儲在一個配置文件中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 # 檢查白名單用戶權限是否存在 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 # 如果用戶權限不存在,則添加權限 $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@%用戶權限是否存在 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 # 如果用戶權限存在,則刪除權限 $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
到此這篇關于使用Shell腳本進行MySql權限修改的實現(xiàn)教程的文章就介紹到這了,更多相關Shell腳本修改MySql權限內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL中參數(shù)sql_safe_updates在生產(chǎn)環(huán)境的使用詳解
這篇文章主要給大家介紹了關于MySQL中參數(shù)sql_safe_updates在生產(chǎn)環(huán)境使用的相關資料,并給大家分享了解決mysql sql_safe_updates不支持子查詢更新的方法,分享出來供大家參考學習,需要的朋友們下面來一起看看吧。2017-11-11Windows 64 位 mysql 5.7以上版本包解壓中沒有data目錄和my-default.ini及服務無法啟動
這篇文章主要介紹了Windows 64 位 mysql 5.7以上版本包解壓中沒有data目錄和my-default.ini及服務無法啟動的快速解決辦法(問題小結),需要的朋友可以參考下2018-03-03