如何在宝塔面板批量创建大量数据库并独立分配权限_利用API批量提交JSON请求自动化执行

夜雪小哥_3021

夜雪小哥_3021

2026-04-07

1076人浏览

原创

宝塔面板api支持批量创建数据库和用户,但需分步调用adddatabase、adddbuser和setdbpriv三个接口,严格遵循先后顺序、命名规范及字段要求,不可合并或并发执行。

如何在宝塔面板批量创建大量数据库并独立分配权限_利用api批量提交json请求自动化执行

宝塔面板 API 是否支持批量创建数据库和用户?

支持,但必须开启 API 并使用 /database?action=AddDatabase 和 /database?action=AddDbUser 两个接口分步执行。宝塔官方 API 文档未提供“一键绑定库+用户+权限”的合并接口,所以不能靠单次请求完成整套操作——这是自动化脚本最容易卡住的第一步。

常见错误现象:{"status":false,"msg":"数据库用户添加失败"},往往是因为先建用户后建库,或库名/用户名含非法字符(如短横线、下划线开头、纯数字),或未指定 ps(备注)字段导致接口校验失败。

  • 必须先调用 AddDatabase 创建库,再调用 AddDbUser 创建用户,最后用 SetDbPriv 显式授权(不能依赖“自动关联”)
  • 所有数据库名、用户名必须符合 MySQL 命名规范:仅含字母、数字、下划线,且不以数字开头
  • API 请求头必须带 Content-Type: application/json 和有效的 login_token

如何构造合法的 JSON 请求体并避免 401 或 500 错误?

关键不是字段多,而是字段顺序和必填项容易遗漏。AddDatabase 必须包含 name、ps、type(固定为 mysql),而 AddDbUser 必须带 username、password、ps、type,且 username 不能与已有用户重名(哪怕属于不同库)。

示例(创建库):

{
  "name": "app_v23",
  "ps": "业务系统v23主库",
  "type": "mysql"
}

示例(授权):SetDbPriv 接口需传 id(数据库 ID)、user_id(用户 ID)、privs(如 "SELECT,INSERT,UPDATE,DELETE"),ID 都是数字,得从上一步响应里提取,不能硬编码。

  • 不要手动拼接 URL 参数,全部走 POST + JSON body
  • ps 字段不能为空字符串,建议设为有意义的描述,否则部分版本宝塔会拒绝
  • 密码必须满足宝塔默认强度策略(至少 8 位,含大小写字母+数字),否则返回 500

Python 脚本怎么安全地串行调用多个 API 并处理依赖关系?

不能用并发(如 asyncio.gather),因为 AddDbUser 依赖 AddDatabase 返回的 id,而 SetDbPriv 又依赖前两步的两个 ID。必须严格串行 + 检查 status == True,否则后续步骤必然失败。

Json Schema Toolkit
Json Schema Toolkit

使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。

下载

核心逻辑片段(简化):

import requests
url = "https://your-server:8888/database"
headers = {"Content-Type": "application/json", "login_token": "xxx"}
<h1>步骤1:建库</h1><p>r1 = requests.post(f"{url}?action=AddDatabase", json={"name":"app_01","ps":"test01","type":"mysql"}, headers=headers, verify=False)
if not r1.json().get("status"):
raise Exception(f"建库失败: {r1.text}")</p><p>db_id = r1.json()["id"]</p><h1>步骤2:建用户(注意:username 全局唯一!)</h1><p>r2 = requests.post(f"{url}?action=AddDbUser", json={"username":"u_app_01","password":"Passw0rd!2024","ps":"app01用户","type":"mysql"}, headers=headers, verify=False)
user_id = r2.json()["id"]</p><h1>步骤3:授权</h1><p>requests.post(f"{url}?action=SetDbPriv", json={"id":db_id,"user_id":user_id,"privs":"SELECT,INSERT"}, headers=headers, verify=False)</p>
  • 每次请求后必须检查 r.json().get("status"),不能只看 HTTP 状态码(宝塔常返回 200 即使业务失败)
  • verify=False 仅用于测试,生产环境应配置证书或用 requests.adapters.HTTPAdapter 指定可信 CA
  • 用户名建议加前缀(如 u_)避免与库名冲突,也方便后期清理

批量执行时为什么部分数据库没授权成功?

大概率是 SetDbPriv 的 privs 字符串格式不对:不能有空格、不能全小写、不能漏掉逗号、不能多加引号。合法值只有类似 "SELECT,INSERT,UPDATE,DELETE" 这种大写+英文逗号分隔的形式,MySQL 权限名大小写敏感,且宝塔不会帮你自动补全或转换。

另一个隐蔽问题是:同一用户对多个库授权时,SetDbPriv 不会覆盖旧权限,而是叠加。如果之前给该用户授过 ALL PRIVILEGES,再用 SELECT,INSERT 调用一次,并不会取消 UPDATE 权限——得先 RevokeDbPriv 再重授,但该接口文档极少被提及,容易忽略。

  • 调试时把每步的 r.text 打印出来,比看日志更快定位哪一步崩了
  • 批量量大时(比如 200+),建议加 time.sleep(0.3) 避免触发宝塔的频率限制(默认 10 次/秒)
  • 权限字段别从 Excel 直接复制粘贴,用 Python 字符串拼接确保格式干净

最麻烦的其实是清理——API 没有批量删除数据库的接口,删库必须一个个调 DelDatabase,而且要先删用户再删库,顺序反了会报错。这点在设计自动化流程时就得预留退路。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

json

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

10044

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

5961

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2075

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3748

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4434

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3471

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

4957

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3882

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11862

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程