下面是通过Shell脚本批量创建服务器上的MySQL数据库账号的完整攻略。
一、前提条件
在执行Shell脚本批量创建MySQL数据库账号之前,需要满足以下前提条件:
- 在服务器上安装MySQL数据库,并拥有root用户权限;
- 已经安装并配置好MySQL客户端程序(mysql和mysqladmin);
- 已经创建好目标数据库,并准备好数据库授权方式和授权对象。
二、编写Shell脚本
在Linux服务器上使用vi或任何文本编辑器创建一个新的Shell脚本文件,并命名为create_mysql_user.sh,然后在该Shell脚本文件中编写以下代码:
#!/bin/bash
# MySQL数据库服务器连接参数
MYSQL_HOST="localhost"
MYSQL_USER="root"
MYSQL_PASSWORD="password"
# 待创建账号的用户名和密码列表
USER_LIST=(
"user1 passw0rd1"
"user2 passw0rd2"
"user3 passw0rd3"
)
# 待授权的数据库及对应的账号权限
DATABASE_LIST=(
"database1 user1 ALL"
"database2 user2 SELECT"
"database3 user3 UPDATE"
)
# 循环创建MySQL账号及对应的授权
for USER in "${USER_LIST[@]}"
do
USERNAME=`echo $USER | awk '{print $1}'`
PASSWORD=`echo $USER | awk '{print $2}'`
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -h${MYSQL_HOST} -e "CREATE USER '${USERNAME}'@'${MYSQL_HOST}' IDENTIFIED BY '${PASSWORD}'"
for DATABASE in "${DATABASE_LIST[@]}"
do
DBNAME=`echo $DATABASE | awk '{print $1}'`
DBUSER=`echo $DATABASE | awk '{print $2}'`
PERMISSION=`echo $DATABASE | awk '{print $3}'`
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -h${MYSQL_HOST} -e "GRANT ${PERMISSION} ON ${DBNAME}.* TO '${DBUSER}'@'${MYSQL_HOST}' IDENTIFIED BY '${PASSWORD}'"
done
done
三、脚本说明
上述Shell脚本文件用于批量创建MySQL数据库账号及授权,具体说明如下:
- 在第2行至第4行中,定义了MySQL数据库服务器的连接参数。其中,MYSQL_HOST代表MySQL服务器的地址(默认为localhost)、MYSQL_USER代表MySQL的root用户的用户名,MYSQL_PASSWORD代表MySQL的root用户的密码;
- 在第7行至第10行中,定义了待创建的MySQL账号及对应的密码列表。其中,每个账号及密码之间使用空格分隔,每个账号及密码之间使用引号包括,账号与密码中间仍然使用空格分隔;
- 在第13行至第16行中,定义了待授权的数据库列表及对应的账号权限。其中,每个数据库及权限之间使用空格分隔,数据库与权限之间使用引号包括,权限也需要全部大写,如“ALL”、“SELECT”或“UPDATE”等;
- 在第19行至第28行中,使用for循环依次处理每个待创建的MySQL账号及授权。具体流程如下:
- 在第20行中,使用awk命令从每个账号及密码对中分离出用户名与密码,并分别存储为USERNAME和PASSWORD变量;
- 在第21行中,使用mysqladmin命令创建对应的MySQL账号;
- 在第22行至第28行中,使用for循环语句依次处理每个待授权的数据库及对应的权限。其中,第24至26行与第21行类似,使用awk命令分离并存储数据库、账号与权限值等参数,然后使用mysql命令为对应的MySQL账号授予对应的数据库权限。
四、实际案例
下面给出两个实际案例,以便更好地说明此脚本的使用方法。
案例一
我们需要在MySQL服务器上批量创建以下三个账号(密码自定义,并已使用引号括起来):
- user1 passw0rd1
- user2 passw0rd2
- user3 passw0rd3
并为这三个账号分别授权以下三个数据库及相应权限:
- database1:用户user1授予ALL权限;
- database2:用户user2授予SELECT权限;
- database3:用户user3授予UPDATE权限;
此时我们只需在Linux服务器上执行以下命令即可:
chmod +x create_mysql_user.sh
./create_mysql_user.sh
脚本执行完毕后,在MySQL服务器上即可看到以上三个账号已经被创建,并且对应的数据库授权已经完成。
案例二
如果我们有一个包含多个账号和授权信息的CSV文件,需要从中读取账号及授权信息,并利用此Shell脚本批量创建MySQL账号和授权,该如何操作呢?
此时,我们可以先使用任何文本编辑器创建一个新的CSV文件(例如account.csv),并将待创建的账号及授权信息按照以下格式逐行输入至该文件中:
"user1","passw0rd1","database1","user1","ALL"
"user2","passw0rd2","database2","user2","SELECT"
"user3","passw0rd3","database3","user3","UPDATE"
在Linux服务器上执行以下Shell脚本,即可自动读取该CSV文件,提取账号及授权信息,并使用前面定义的脚本批量创建MySQL账号及授权:
#!/bin/bash
# MySQL数据库服务器连接参数
MYSQL_HOST="localhost"
MYSQL_USER="root"
MYSQL_PASSWORD="password"
# 待读取的CSV文件路径及列数
CSV_FILE="./account.csv"
CSV_COL_COUNT=5
# 循环读取CSV文件
while read line
do
# 分解每行数据,提取每列数据
cols=($(echo $line | awk -F'"' '{ for(i=2; i<NF; i+=2) print $i }'))
# 定义MySQL账号及授权所需要的参数
USERNAME="${cols[0]}"
PASSWORD="${cols[1]}"
DBNAME="${cols[2]}"
DBUSER="${cols[3]}"
PERMISSION="${cols[4]}"
# 使用MySQL命令创建MySQL账号并授权
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -h${MYSQL_HOST} -e "CREATE USER '${USERNAME}'@'${MYSQL_HOST}' IDENTIFIED BY '${PASSWORD}';"
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} -h${MYSQL_HOST} -e "GRANT ${PERMISSION} ON ${DBNAME}.* TO '${DBUSER}'@'${MYSQL_HOST}' IDENTIFIED BY '${PASSWORD}';"
done < <(tail -n +2 $CSV_FILE)
该脚本的逻辑流程和变量定义与第二部分中的脚本相同,唯一不同的是在读取待创建的账号及授权信息时,我们使用了read命令读取CSV文件中的每一行数据,然后使用awk命令从每一行中分离出各个列的值,存储在cols数组中,最后插入MySQL数据库中完成创建账号及授权。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过Shell脚本批量创建服务器上的MySQL数据库账号 - Python技术站