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

下面是通过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日

相关文章

  • 如何使用Python实现数据库中数据的批量更新?

    以下是使用Python实现数据库中数据的批量更新的完整攻略。 数据库中数据的批量更新简介 在数据库中,批量更新是一次性更新多条记录。在Python中,可以使用pymysql连接MySQL数据库,并UPDATE语句实现批量更新。 步骤1:连接到数据库 在Python中,可以使用pymysql连接MySQL数据库以下是连接到MySQL的基本语法: import …

    python 2023年5月12日
    00
  • MySQL的锁机制之全局锁和表锁的实现

    MySQL的锁机制主要包括全局锁、表级锁和行级锁三种。其中,全局锁是一种比较重量级的锁,会锁住整个数据库实例,一般用于备份和恢复等操作;表锁则是一种轻量级的锁,可以针对单独的表进行加锁或者解锁操作。 一、全局锁的实现 MySQL的全局锁实现可以通过一条命令来完成: FLUSH TABLES WITH READ LOCK; 执行这条命令后,MySQL会对整个数…

    database 2023年5月22日
    00
  • MySQL必备的常见知识点汇总整理

    MySQL必备的常见知识点汇总整理 MySQL是一款常用的关系型数据库管理系统,具备高效、安全、可靠、易于使用等特性。它可以通过命令行和可视化工具进行管理和操作。为了让用户更好地理解MySQL,本文从必备的常见知识点出发进行汇总整理。 数据类型 MySQL支持多种数据类型,包括整型、浮点型、字符型、日期型等。数据类型不仅影响到数据在内存中的存储形式,还会影响…

    database 2023年5月22日
    00
  • Linux(Unix)中误删除的文件恢复方法

    下面是针对“Linux(Unix)中误删除的文件恢复方法”的完整攻略。 1. 前言 在 Linux(或 Unix)系统上,误删文件是一个非常常见的错误操作,但好在 Linux 工具箱中有一些特殊的工具可以支持我们从磁盘中恢复这些文件。在本攻略中,我将介绍两种主要的误删除文件恢复方法,包括基于命令行的方法和基于应用程序的工具方法。 2. 使用命令行恢复文件 L…

    database 2023年5月22日
    00
  • springboot整合apache ftpserver详细教程(推荐)

    我来为您详细讲解“springboot整合apache ftpserver详细教程(推荐)”。 1. 什么是Apache FtpServer Apache Ftpserver是一个基于Java的FTP服务器,它是一个完整的FTP服务器,拥有丰富的配置选项,支持多种身份验证方式,同时也支持SSl和TLS加密,是目前使用较广泛的FTP服务器之一。 2. Spri…

    database 2023年5月22日
    00
  • MySQL数据库是什么

    MySQL数据库是一种开源、关系数据库管理系统,是目前互联网上最流行、最常用的数据库之一。它是由瑞典MySQL AB公司开发,并由Oracle公司管理和支持。MySQL的发展历程非常长,自1995年诞生以来,已经经历了多次重大升级和改进,包括版本升级、功能增强等,使其成为一个高效、可靠、功能强大、使用方便的数据库管理系统。 MySQL数据库的特点主要有: 开…

    2023年3月8日
    00
  • 使用JDBC4.0操作XML类型的字段(保存获取xml数据)的方法

    操作XML类型的字段需要用到JDBC4.0以上版本的驱动和数据库系统支持XML数据类型,以下是操作XML类型字段的完整攻略: 第一步:创建XML类型字段 在创建表的时候,可以指定一个XML类型的字段,例如MySQL创建如下表: CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `…

    database 2023年5月21日
    00
  • Oracle 11g+windows 环境下Ecology7系统安装过程

    Oracle 11g+Windows环境下Ecology7系统安装过程 1. 准备工作 在开始安装Ecology7之前,需要先行完成以下准备工作: 1.1 下载软件 首先,需要下载以下所需软件: JDK 1.8 Oracle 11gR2 安装包 Ecology7 安装包 其中,JDK 1.8安装包可从Oracle官方网站下载,而Oracle 11gR2及Ec…

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