通过Shell脚本批量创建服务器上的MySQL数据库账号

yizhihongxing

下面是通过Shell脚本批量创建服务器上的MySQL数据库账号的完整攻略。

一、前提条件

在执行Shell脚本批量创建MySQL数据库账号之前,需要满足以下前提条件:

  1. 在服务器上安装MySQL数据库,并拥有root用户权限;
  2. 已经安装并配置好MySQL客户端程序(mysql和mysqladmin);
  3. 已经创建好目标数据库,并准备好数据库授权方式和授权对象。

二、编写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数据库账号及授权,具体说明如下:

  1. 在第2行至第4行中,定义了MySQL数据库服务器的连接参数。其中,MYSQL_HOST代表MySQL服务器的地址(默认为localhost)、MYSQL_USER代表MySQL的root用户的用户名,MYSQL_PASSWORD代表MySQL的root用户的密码;
  2. 在第7行至第10行中,定义了待创建的MySQL账号及对应的密码列表。其中,每个账号及密码之间使用空格分隔,每个账号及密码之间使用引号包括,账号与密码中间仍然使用空格分隔;
  3. 在第13行至第16行中,定义了待授权的数据库列表及对应的账号权限。其中,每个数据库及权限之间使用空格分隔,数据库与权限之间使用引号包括,权限也需要全部大写,如“ALL”、“SELECT”或“UPDATE”等;
  4. 在第19行至第28行中,使用for循环依次处理每个待创建的MySQL账号及授权。具体流程如下:
  5. 在第20行中,使用awk命令从每个账号及密码对中分离出用户名与密码,并分别存储为USERNAME和PASSWORD变量;
  6. 在第21行中,使用mysqladmin命令创建对应的MySQL账号;
  7. 在第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技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 一文带你吃透Redis

    目录 1. 基本数据结构 2. 数据持久化 3. 高可用 4. 缓存 文章字数大约1.9万字,阅读大概需要66分钟,建议收藏后慢慢阅读!!! 1. 基本数据结构 什么是Redis Redis是一个数据库,不过与传统数据库不同的是Redis的数据库是存在内存中,所以读写速度非常快,因此 Redis被广泛应用于缓存方向。 除此之外,Redis也经常用来做分布式锁…

    Redis 2023年4月10日
    00
  • PHP ADODB实现事务处理功能示例

    PHP ADODB是一个为PHP程序开发人员提供高级数据库抽象类库的工具集。其中之一就是实现事务处理功能的类库。以下是实现事务处理的完整攻略: 1. 安装ADODB类库 首先,我们需要安装ADODB类库。可以通过Composer进行安装,Composer是PHP的一个包管理器,可以通过它方便地安装第三方类库。在运行Composer之前,需要先安装Compos…

    database 2023年5月21日
    00
  • PHP连接SQLServer2005 的问题解决方法

    下面我将为您详细讲解“PHP连接SQLServer2005的问题解决方法”的完整攻略。 问题描述 在使用PHP连接SQLServer2005数据库时,可能会遇到以下问题: 使用mssql_connect函数连接失败,提示“Unable to connect to server”(无法连接到服务器)的错误。 使用sqlsrv_connect函数连接失败,提示“…

    database 2023年5月22日
    00
  • Oracle两张表关联批量更新其中一张表的数据

    要批量更新Oracle中两张表的数据,需要进行如下步骤: 使用SELECT语句编写需要更新的数据的查询语句 将上述查询语句嵌入到UPDATE语句中,来实现数据的批量更新 使用JOIN语句连接需要更新的表 下面通过两个示例来进行讲解: 示例1:更新学生表中的成绩,假设学号和成绩需要更新 第一步,使用SELECT语句查询需要更新的数据: SELECT stu.s…

    database 2023年5月21日
    00
  • mysql索引学习教程

    Mysql索引学习教程 Mysql索引是提高数据查询速度的重要工具。本教程将详细讲解Mysql索引相关知识。 什么是索引? 索引是一种数据结构,用于在关系型数据库中提高查询效率。它们类似于图书馆中的书籍索引或字典索引,通过引导对数据进行快速访问和检索。 当执行一个SQL语句时,Mysql会遍历整个表来找到符合条件的记录行。但是,当表越来越大时,遍历整个表的操…

    database 2023年5月22日
    00
  • RedHat Linux5.5下Oracle 11g安装图解教程

    RedHat Linux 5.5 下 Oracle 11g 安装图解教程 1. 前置条件 在安装 Oracle 11g 之前,请确保系统满足以下要求: 系统版本为 RedHat Linux 5.5; 机器的 CPU 架构为 x86_64; 系统内核版本为 2.6.18-194.el5; 系统硬件配置至少为 1GB 内存和 3GB 磁盘空间。 2. 下载 Or…

    database 2023年5月22日
    00
  • sql存储过程几个简单例子

    以下是关于SQL存储过程的一些详细说明和示例: 什么是SQL存储过程? SQL存储过程是一组为了完成特定任务的SQL语句集合。存储过程通常用于实现事务处理任务,例如插入、删除或更新大量数据的操作。 与将SQL命令直接写入代码中相比,使用存储过程有很多优势,包括: 重用性:存储过程可以在多个应用程序中重复使用,无需编写相同的SQL语句。 性能:存储过程通常比动…

    database 2023年5月21日
    00
  • PHP使用pdo连接access数据库并循环显示数据操作示例

    下面就来详细讲解一下如何使用PHP使用PDO连接Access数据库并循环显示数据操作。 步骤一:安装Access数据库驱动 首先需要安装 Microsoft Access Driver 的驱动程序,可以在微软的官网下载,下载后按照提示安装即可。如果已经安装了MS Office,则一般是已经自带了该驱动程序。 步骤二:建立Access数据库 在安装好驱动程序后…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部