腳本方式一鍵獲取MySQL的用戶許可權

  • 2019 年 10 月 4 日
  • 筆記

日常巡檢MySQL的時候,需要看下用戶許可權是否過大,每次通過show grants操作則很不方便。因此寫個腳本。

使用前,先修改下腳本裡面資料庫的連接配置資訊。

具體腳本如下:

#!/bin/bash  # 一鍵獲取MySQL賬戶及相關的許可權  # Date: 2017/02/14  # Author: Lee    user='root'  passwd='Abcd@1234'  MYSQL_CMD='/usr/bin/mysql'    if [ $# != 1 ]; then   echo -e "33[31mUsage: $0 密碼33[0m" && exit 10  fi    echo -e "33[31m***********************  MySQL用戶許可權統計  *****************************33[0m"  echo -e "33[31m執行時間: $(date "+%F %T")33[0m"    # 判斷文件是否存在  [[ -e /tmp/user.log ]] && rm -f /tmp/user.log    # 獲取並存儲用戶許可權到文件  $MYSQL_CMD -u$user -p$passwd -e "SELECT concat(''',user,''','@',concat(''',host,''')) AS 'account' from mysql.user into outfile '/tmp/user.log'; " > /dev/null 2>&1    if [ $? -ne 0 ]; then    echo -e "33[31m腳本執行異常,已退出!! 請查看是否有密碼錯誤 or 沒有 select into outfile的許可權33[0m" && exit 10  fi  # 注意:5.7上默認禁止了select .. into outfile的許可權,需要在[mysqld]段加上secure-file-priv= 重啟MySQL才行。    # 輸出查詢結果  while read line; do      echo       $MYSQL_CMD -u$user -p$passwd 2>/dev/null -e "show grants for $line;"      echo       echo '***********************************************************************'  done < /tmp/user.log && rm -f /tmp/user.log

運行結果類似下圖: