You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量为多台MariaDB服务器的同名表授权相同用户?

批量给50台MariaDB服务器的同一用户授权方案

既然已经配置了SSH免密登录,完全可以通过批量脚本或运维工具一次性完成授权操作,下面是两种实用方案:

方案一:Bash批量脚本(快速上手)

1. 准备服务器列表

创建一个文本文件server_list.txt,每行写一台服务器的IP或主机名:

192.168.1.10
192.168.1.11
# ... 剩下的48台服务器

2. 编写批量执行脚本

创建grant_privs.sh脚本,替换里面的占位符为你的实际信息:

#!/bin/bash

# 替换为你的实际参数
DB_USER="target_user"
CLIENT_IP="10.0.0.0/24"  # 允许该IP段访问,如需任意IP用'%'(不推荐)
TARGET_DB="your_database"
DB_PASS="user_password"
ROOT_PASS="mariadb_root_password"
SERVER_LIST="./server_list.txt"

# 遍历所有服务器执行授权
while read -r server; do
    echo "正在处理服务器:$server"
    ssh "$server" "mysql -u root -p'$ROOT_PASS' -e \"GRANT ALL PRIVILEGES ON $TARGET_DB.* TO '$DB_USER'@'$CLIENT_IP' IDENTIFIED BY '$DB_PASS'; FLUSH PRIVILEGES;\""
done < "$SERVER_LIST"

3. 执行脚本

给脚本加执行权限并运行:

chmod +x grant_privs.sh
./grant_privs.sh

安全提示

不要在脚本里明文写密码!可以在目标服务器的root用户下创建~/.my.cnf文件,内容如下:

[mysql]
user=root
password=your_root_password

然后脚本里的mysql命令可以简化为mysql -e "...",避免密码暴露。

方案二:使用Ansible(适合长期运维)

如果经常需要批量管理服务器,Ansible会更高效、规范:

1. 准备Inventory文件

创建inventory.ini,列出所有服务器:

[mariadb_servers]
192.168.1.10
192.168.1.11
# ... 其他服务器

2. 编写Playbook

创建grant_db_privs.yml:

---
- name: 批量授予MariaDB用户权限
  hosts: mariadb_servers
  tasks:
    - name: 执行授权操作
      mysql_user:
        name: target_user
        password: user_password
        priv: your_database.*:ALL
        host: 10.0.0.0/24
        state: present
        login_user: root
        login_password: mariadb_root_password

3. 执行Playbook

ansible-playbook -i inventory.ini grant_db_privs.yml

注意事项

  • 先在单台服务器测试授权命令,确认生效后再批量执行
  • 如果用户已经存在,授权命令会更新其权限,不会创建重复用户
  • 尽量限制CLIENT_IP的范围,不要用'%'(允许所有IP),避免安全风险

内容的提问来源于stack exchange,提问作者Anu A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:54:28