agent-database-cli 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI_INSTALL.md +72 -0
- package/LICENSE +21 -0
- package/README.md +340 -0
- package/README_EN.md +341 -0
- package/SKILL.md +252 -0
- package/config/docker-test.json +40 -0
- package/dist/adapters/base-sql.d.ts +12 -0
- package/dist/adapters/base-sql.js +22 -0
- package/dist/adapters/base-sql.js.map +1 -0
- package/dist/adapters/factory.d.ts +2 -0
- package/dist/adapters/factory.js +26 -0
- package/dist/adapters/factory.js.map +1 -0
- package/dist/adapters/mongodb.d.ts +14 -0
- package/dist/adapters/mongodb.js +137 -0
- package/dist/adapters/mongodb.js.map +1 -0
- package/dist/adapters/mysql.d.ts +12 -0
- package/dist/adapters/mysql.js +38 -0
- package/dist/adapters/mysql.js.map +1 -0
- package/dist/adapters/oracle-sqlcl.d.ts +19 -0
- package/dist/adapters/oracle-sqlcl.js +334 -0
- package/dist/adapters/oracle-sqlcl.js.map +1 -0
- package/dist/adapters/oracle.d.ts +13 -0
- package/dist/adapters/oracle.js +47 -0
- package/dist/adapters/oracle.js.map +1 -0
- package/dist/adapters/postgres.d.ts +12 -0
- package/dist/adapters/postgres.js +40 -0
- package/dist/adapters/postgres.js.map +1 -0
- package/dist/adapters/redis.d.ts +15 -0
- package/dist/adapters/redis.js +91 -0
- package/dist/adapters/redis.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +118 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.js +147 -0
- package/dist/config.js.map +1 -0
- package/dist/connection-manager.d.ts +24 -0
- package/dist/connection-manager.js +91 -0
- package/dist/connection-manager.js.map +1 -0
- package/dist/daemon/client.d.ts +3 -0
- package/dist/daemon/client.js +33 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/config-manager.d.ts +15 -0
- package/dist/daemon/config-manager.js +44 -0
- package/dist/daemon/config-manager.js.map +1 -0
- package/dist/daemon/control.d.ts +9 -0
- package/dist/daemon/control.js +53 -0
- package/dist/daemon/control.js.map +1 -0
- package/dist/daemon/paths.d.ts +5 -0
- package/dist/daemon/paths.js +18 -0
- package/dist/daemon/paths.js.map +1 -0
- package/dist/daemon/server.d.ts +1 -0
- package/dist/daemon/server.js +119 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/output.d.ts +2 -0
- package/dist/output.js +39 -0
- package/dist/output.js.map +1 -0
- package/dist/runtime.d.ts +5 -0
- package/dist/runtime.js +25 -0
- package/dist/runtime.js.map +1 -0
- package/dist/security.d.ts +8 -0
- package/dist/security.js +239 -0
- package/dist/security.js.map +1 -0
- package/dist/ssh-tunnel.d.ts +8 -0
- package/dist/ssh-tunnel.js +231 -0
- package/dist/ssh-tunnel.js.map +1 -0
- package/dist/types.d.ts +69 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/masking.d.ts +2 -0
- package/dist/utils/masking.js +14 -0
- package/dist/utils/masking.js.map +1 -0
- package/package.json +50 -0
package/AI_INSTALL.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# AI 安装说明
|
|
2
|
+
|
|
3
|
+
使用本工具时,先按下面步骤安装 CLI 和 skill。
|
|
4
|
+
|
|
5
|
+
## 1. 安装 CLI
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g agent-database-cli
|
|
9
|
+
agent-database-cli --help
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
如果 npm 包安装受限,使用等价的源码安装方式:
|
|
13
|
+
|
|
14
|
+
```powershell
|
|
15
|
+
git clone https://github.com/sleepinginsummer/agent-database-cli.git
|
|
16
|
+
cd agent-database-cli
|
|
17
|
+
npm install
|
|
18
|
+
npm run build
|
|
19
|
+
npm link
|
|
20
|
+
agent-database-cli --help
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
如果 `agent-database-cli --help` 失败,先检查:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
node --version
|
|
27
|
+
npm --version
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
需要 Node.js `>= 20` 和 npm `>= 10`。
|
|
31
|
+
|
|
32
|
+
## 2. 初始化配置目录
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
mkdir -p ~/.agent-database-cli
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
然后创建并编辑:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
~/.agent-database-cli/config.json
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
配置内容可参考项目中的 `https://github.com/sleepinginsummer/agent-database-cli/blob/main/config/docker-test.json`。配置文件保存真实数据库连接信息,不要公开。可以询问用户如何配置数据库连接,或告知用户配置目录。
|
|
45
|
+
|
|
46
|
+
## 3. 安装 skill
|
|
47
|
+
|
|
48
|
+
将本仓库根目录的 `https://github.com/sleepinginsummer/agent-database-cli/blob/main/SKILL.md` 安装到 agent 的 skills 目录。
|
|
49
|
+
|
|
50
|
+
Codex 默认目录示例:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
mkdir -p ~/.codex/skills/agent-database-cli
|
|
54
|
+
cp SKILL.md ~/.codex/skills/agent-database-cli/SKILL.md
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
如果 AI 使用其它 skills 目录,将 `SKILL.md` 复制到对应的 `agent-database-cli/SKILL.md`。
|
|
58
|
+
|
|
59
|
+
## 4. 更新
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npm install -g agent-database-cli@latest
|
|
63
|
+
```
|
|
64
|
+
## 5. 验证测试
|
|
65
|
+
配置完成后,测试执行:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
agent-database-cli list
|
|
69
|
+
agent-database-cli test --db <databaseName>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
拿到数据库配置名后,再执行 `exec`、`meta` 或 `reset`。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 syy
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# agent-database-cli
|
|
4
|
+
|
|
5
|
+
基于 CLI 的多数据库操作工具,将常见数据库连接、查询、元信息读取和连接复用能力封装为 Agent 可调用的本地命令。
|
|
6
|
+
|
|
7
|
+
MySQL · PostgreSQL · Redis · Oracle · MongoDB · 只读模式 · 命令黑名单 · SQLcl Oracle · 本地 daemon
|
|
8
|
+
|
|
9
|
+
<p>
|
|
10
|
+
<img src="https://img.shields.io/badge/CLI-agent--database--cli-2ea44f" alt="CLI agent-database-cli">
|
|
11
|
+
<img src="https://img.shields.io/badge/License-MIT-green" alt="License MIT">
|
|
12
|
+
<img src="https://img.shields.io/badge/Node.js-%3E%3D20-339933?logo=node.js&logoColor=white" alt="Node.js >=20">
|
|
13
|
+
<img src="https://img.shields.io/badge/npm-%3E%3D10-CB3837?logo=npm&logoColor=white" alt="npm >=10">
|
|
14
|
+
<img src="https://img.shields.io/badge/Windows-MacOS-0078D6?labelColor=0078D6&color=C0C0C0" alt="Windows/MacOS">
|
|
15
|
+
<img src="https://img.shields.io/badge/release-v0.2.6-blue" alt="release v0.2.6">
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
[AI 一键安装](#ai-一键安装) · [安装](#安装) · [配置](#配置) · [权限配置](#权限配置) · [Oracle SQLcl](#oracle-sqlcl) · [许可证](#许可证) · [友情链接](#友情链接)
|
|
19
|
+
|
|
20
|
+
中文 | [English](README_EN.md)
|
|
21
|
+
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
## 简介
|
|
25
|
+
|
|
26
|
+
`agent-database-cli` 参考 [Anarkh-Lee/universal-db-mcp](https://github.com/Anarkh-Lee/universal-db-mcp) 的数据库适配器、配置加载、安全检查和连接管理分层,改写为独立 CLI 形式,不包含 MCP/HTTP/SSE 服务。
|
|
27
|
+
|
|
28
|
+
它能做的事:
|
|
29
|
+
|
|
30
|
+
- 列出当前支持的数据库类型和本地已配置连接
|
|
31
|
+
- 对指定数据库执行 SQL、Redis 命令或 MongoDB JSON 命令
|
|
32
|
+
- 查询数据库元信息,例如表、列、集合、Redis keys
|
|
33
|
+
- 按单个数据库配置启用只读模式和命令黑名单
|
|
34
|
+
- CLI 按需自动启动本地 daemon;daemon 默认空闲 `300` 秒后自动退出
|
|
35
|
+
- 通过本地 daemon 保持连接,单个数据库连接默认空闲 `180` 秒后释放
|
|
36
|
+
- Oracle 可在 `oracledb` 和 SQLcl 两种连接方式之间切换
|
|
37
|
+
- 不保存或输出脱敏前的密码、token、secret
|
|
38
|
+
- daemon 在 Windows 使用 named pipe,在 macOS/Linux 使用 Unix socket
|
|
39
|
+
|
|
40
|
+
驱动配置表:
|
|
41
|
+
|
|
42
|
+
| 数据库 | `type` | 默认驱动 | 驱动切换配置 | 通用配置 |
|
|
43
|
+
| --- | --- | --- | --- | --- |
|
|
44
|
+
| MySQL | `mysql` | npm 包 `mysql2` | 暂不支持切换 | `readonly`、`blacklist`、`keepAliveSeconds` |
|
|
45
|
+
| PostgreSQL | `postgres` | npm 包 `pg` | 暂不支持切换 | `readonly`、`blacklist`、`keepAliveSeconds` |
|
|
46
|
+
| Redis 单机 | `redis` | npm 包 `redis` | 仅配置 `url` | `readonly`、`blacklist`、`keepAliveSeconds` |
|
|
47
|
+
| Redis 集群 | `redis` | npm 包 `redis` | 同时配置 `url` 和 `redisCluster.nodes` | `readonly`、`blacklist`、`keepAliveSeconds` |
|
|
48
|
+
| Oracle | `oracle` | npm 包 `oracledb` | `oracleDriver: "oracledb" \| "sqlcl"`,SQLcl 模式可配 `sqlclPath`、`javaHome`,低版本 Oracle 建议使用 SQLcl 驱动 | `readonly`、`blacklist`、`keepAliveSeconds` |
|
|
49
|
+
| MongoDB | `mongodb` | npm 包 `mongodb` | 暂不支持切换;可配 `database` 指定默认库 | `readonly`、`blacklist`、`keepAliveSeconds` |
|
|
50
|
+
|
|
51
|
+
## 安装
|
|
52
|
+
|
|
53
|
+
### 环境要求
|
|
54
|
+
|
|
55
|
+
- Node.js `>= 20`
|
|
56
|
+
- npm `>= 10`
|
|
57
|
+
- 本机网络可访问目标数据库
|
|
58
|
+
- 如使用 Docker 集成测试,需要 Docker 和 Docker Compose
|
|
59
|
+
- 如 Oracle 使用 SQLcl,需要本机可运行 SQLcl 和 Java
|
|
60
|
+
|
|
61
|
+
### AI 一键安装
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
安装请阅读 https://github.com/sleepinginsummer/agent-database-cli/blob/main/AI_INSTALL.md,按说明安装 CLI 并添加 `SKILL.md`。
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 手动全局安装
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npm install -g agent-database-cli
|
|
71
|
+
agent-database-cli --help
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
如果 npm 包安装受限,使用等价的源码安装方式:
|
|
75
|
+
|
|
76
|
+
```powershell
|
|
77
|
+
git clone https://github.com/sleepinginsummer/agent-database-cli.git
|
|
78
|
+
cd agent-database-cli
|
|
79
|
+
npm install
|
|
80
|
+
npm run build
|
|
81
|
+
npm link
|
|
82
|
+
agent-database-cli --help
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
添加skiil.md到需要使用的agent中
|
|
86
|
+
|
|
87
|
+
## 配置
|
|
88
|
+
|
|
89
|
+
默认配置文件:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
~/.agent-database-cli/config.json
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
可以通过环境变量修改配置位置:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
AGENT_DATABASE_CLI_CONFIG=/path/to/config.json agent-database-cli list
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
配置文件是一个对象,`databases` 中每个 key 是一个数据库连接名:
|
|
102
|
+
|
|
103
|
+
- `type`: 数据库类型,支持 `mysql`、`postgres`、`redis`、`oracle`、`mongodb`
|
|
104
|
+
- `url`: 数据库连接 URL;Redis 单机模式直接连接该地址,Redis 集群模式下作为入口节点 URL
|
|
105
|
+
- `redisCluster`: Redis 集群配置,可选;配置后会使用集群模式连接
|
|
106
|
+
- `sshTunnel`: SSH 隧道配置,可选;单机模式会转发数据库 URL 的 host/port,Redis 集群模式会为每个节点分别建立本地转发
|
|
107
|
+
- `database`: MongoDB 默认数据库名,可选
|
|
108
|
+
- `readonly`: 是否启用只读模式,默认 `true`;仅在明确需要写入时才建议显式设为 `false`
|
|
109
|
+
- `blacklist`: 命令黑名单数组,大小写不敏感
|
|
110
|
+
- `keepAliveSeconds`: 单个数据库连接空闲释放秒数,默认 `180`
|
|
111
|
+
- `oracleDriver`: Oracle 驱动,支持 `oracledb` 或 `sqlcl`
|
|
112
|
+
- `sqlclPath`: SQLcl 可执行文件路径,仅 `oracleDriver: "sqlcl"` 时使用
|
|
113
|
+
- `javaHome`: SQLcl 使用的 `JAVA_HOME`,可选
|
|
114
|
+
|
|
115
|
+
`redisCluster` 目前支持以下字段:
|
|
116
|
+
|
|
117
|
+
- `nodes`: Redis 集群节点 URL 数组,至少配置一个,支持 `redis://` 和 `rediss://`
|
|
118
|
+
|
|
119
|
+
Redis 集群补充说明:
|
|
120
|
+
|
|
121
|
+
- 当前实现里,Redis 集群模式必须同时配置 `url` 和 `redisCluster.nodes`
|
|
122
|
+
- `url` 用作集群入口节点,建议填写任意一个稳定可达的集群节点 URL
|
|
123
|
+
- `redisCluster.nodes` 用作集群节点清单;如走 SSH 隧道,也用于为每个节点建立本地转发和地址映射
|
|
124
|
+
- 配置 `redisCluster.nodes` 后会切换到 Redis Cluster 模式
|
|
125
|
+
- 如同时配置 `sshTunnel`,程序会给每个集群节点分别建立本地端口转发,并通过地址映射接管集群节点跳转
|
|
126
|
+
- 走 SSH 隧道时,`redisCluster.nodes` 需要覆盖客户端实际可能访问到的集群节点地址
|
|
127
|
+
|
|
128
|
+
`sshTunnel` 支持密码、私钥、密码加私钥、带通行短语的私钥认证:
|
|
129
|
+
|
|
130
|
+
- `host`: SSH 跳板机地址
|
|
131
|
+
- `port`: SSH 端口,默认 `22`
|
|
132
|
+
- `username`: SSH 用户名
|
|
133
|
+
- `password`: SSH 密码,可选
|
|
134
|
+
- `privateKeyPath`: 私钥文件路径,可选,支持 `~`
|
|
135
|
+
- `privateKey`: 私钥内容,可选,和 `privateKeyPath` 二选一
|
|
136
|
+
- `passphrase`: 私钥通行短语,可选,仅配置私钥时允许使用
|
|
137
|
+
- `readyTimeout`: SSH 连接超时时间,单位毫秒,可选
|
|
138
|
+
|
|
139
|
+
黑名单和只读模式兼容,优先级固定为:先检查黑名单,命中直接拒绝;未命中再检查只读模式。
|
|
140
|
+
|
|
141
|
+
只读模式说明:
|
|
142
|
+
|
|
143
|
+
- 默认启用只读模式,未显式配置 `readonly` 时也会拒绝写操作
|
|
144
|
+
- 建议所有数据库连接默认保持只读,需要变更数据时,让 AI 先给出对应 SQL 或命令,再由你确认后执行
|
|
145
|
+
- 如果某个连接确实需要写入,再单独将该连接配置为 `readonly: false`
|
|
146
|
+
|
|
147
|
+
参考配置:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"databases": {
|
|
152
|
+
"local-mysql": {
|
|
153
|
+
"type": "mysql",
|
|
154
|
+
"url": "mysql://user:password@localhost:3306/app",
|
|
155
|
+
"readonly": true,
|
|
156
|
+
"blacklist": ["drop", "truncate", "delete"],
|
|
157
|
+
"keepAliveSeconds": 180
|
|
158
|
+
},
|
|
159
|
+
"remote-mysql": {
|
|
160
|
+
"type": "mysql",
|
|
161
|
+
"url": "mysql://user:password@db.internal:3306/app",
|
|
162
|
+
"sshTunnel": {
|
|
163
|
+
"host": "jump.example.com",
|
|
164
|
+
"port": 22,
|
|
165
|
+
"username": "deploy",
|
|
166
|
+
"privateKeyPath": "~/.ssh/id_rsa",
|
|
167
|
+
"passphrase": "key-passphrase"
|
|
168
|
+
},
|
|
169
|
+
"readonly": true,
|
|
170
|
+
"keepAliveSeconds": 180
|
|
171
|
+
},
|
|
172
|
+
"redis-standalone": {
|
|
173
|
+
"type": "redis",
|
|
174
|
+
"url": "redis://localhost:6379",
|
|
175
|
+
"readonly": false,
|
|
176
|
+
"blacklist": ["flushall", "flushdb"],
|
|
177
|
+
"keepAliveSeconds": 180
|
|
178
|
+
},
|
|
179
|
+
"redis-cluster": {
|
|
180
|
+
"type": "redis",
|
|
181
|
+
"url": "redis://10.0.0.11:7001",
|
|
182
|
+
"redisCluster": {
|
|
183
|
+
"nodes": [
|
|
184
|
+
"redis://10.0.0.11:7001",
|
|
185
|
+
"redis://10.0.0.12:7001",
|
|
186
|
+
"redis://10.0.0.13:7001"
|
|
187
|
+
]
|
|
188
|
+
},
|
|
189
|
+
"readonly": true,
|
|
190
|
+
"blacklist": ["flushall", "flushdb"],
|
|
191
|
+
"keepAliveSeconds": 180
|
|
192
|
+
},
|
|
193
|
+
"redis-cluster-via-ssh": {
|
|
194
|
+
"type": "redis",
|
|
195
|
+
"url": "redis://10.0.0.11:7001",
|
|
196
|
+
"redisCluster": {
|
|
197
|
+
"nodes": [
|
|
198
|
+
"redis://10.0.0.11:7001",
|
|
199
|
+
"redis://10.0.0.12:7001",
|
|
200
|
+
"redis://10.0.0.13:7001"
|
|
201
|
+
]
|
|
202
|
+
},
|
|
203
|
+
"sshTunnel": {
|
|
204
|
+
"host": "jump.example.com",
|
|
205
|
+
"port": 22,
|
|
206
|
+
"username": "deploy",
|
|
207
|
+
"privateKeyPath": "~/.ssh/id_rsa"
|
|
208
|
+
},
|
|
209
|
+
"readonly": true,
|
|
210
|
+
"blacklist": ["flushall", "flushdb"],
|
|
211
|
+
"keepAliveSeconds": 180
|
|
212
|
+
},
|
|
213
|
+
"oracle-test": {
|
|
214
|
+
"type": "oracle",
|
|
215
|
+
"url": "oracle://USER:password@127.0.0.1:1521/qftest201",
|
|
216
|
+
"oracleDriver": "sqlcl",
|
|
217
|
+
"sqlclPath": "/opt/homebrew/Caskroom/sqlcl/26.1.0.086.1709/sqlcl/bin/sql",
|
|
218
|
+
"javaHome": "/Applications/IntelliJ IDEA Ultimate.app/Contents/jbr/Contents/Home",
|
|
219
|
+
"readonly": true,
|
|
220
|
+
"blacklist": ["drop", "truncate", "delete", "update", "insert", "merge", "alter", "create"],
|
|
221
|
+
"keepAliveSeconds": 180
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
## 权限配置
|
|
229
|
+
|
|
230
|
+
权限控制建议同时使用 `readonly` 和 `blacklist`,不要只依赖其中一个。
|
|
231
|
+
|
|
232
|
+
### 只读模式
|
|
233
|
+
|
|
234
|
+
- 默认值是 `true`
|
|
235
|
+
- 不配置 `readonly` 时,仍然会按只读模式处理
|
|
236
|
+
- 推荐所有日常查询连接都保持默认只读
|
|
237
|
+
- 需要修改数据时,建议先让 AI 生成对应 SQL 或命令,再由你确认后执行
|
|
238
|
+
- 只有明确需要写入的专用连接,才单独配置 `readonly: false`
|
|
239
|
+
|
|
240
|
+
### 命令黑名单
|
|
241
|
+
|
|
242
|
+
- 黑名单优先级高于只读模式
|
|
243
|
+
- 命中黑名单后会直接拒绝,不再继续判断是否只读
|
|
244
|
+
- 适合拦截高危命令,避免误执行删库、删表、结构变更、批量写入、清空缓存等操作
|
|
245
|
+
- 建议生产库、共享测试库、线上 Redis 都配置黑名单
|
|
246
|
+
|
|
247
|
+
### 执行顺序
|
|
248
|
+
|
|
249
|
+
1. 先检查 `blacklist`
|
|
250
|
+
2. 命中则直接拒绝
|
|
251
|
+
3. 未命中再检查 `readonly`
|
|
252
|
+
4. `readonly` 生效时只允许读命令
|
|
253
|
+
|
|
254
|
+
### 常见高危命令
|
|
255
|
+
|
|
256
|
+
MySQL / PostgreSQL / Oracle 常见高危 SQL:
|
|
257
|
+
|
|
258
|
+
```json
|
|
259
|
+
["drop", "truncate", "delete", "update", "insert", "merge", "alter", "create", "replace", "grant", "revoke"]
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
Redis 常见高危命令:
|
|
263
|
+
|
|
264
|
+
```json
|
|
265
|
+
["flushall", "flushdb", "del", "unlink", "set", "mset", "expire", "rename", "hset", "lpush", "rpush", "sadd", "zadd"]
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
MongoDB 常见高危命令:
|
|
269
|
+
|
|
270
|
+
```json
|
|
271
|
+
["insertOne", "insertMany", "updateOne", "updateMany", "replaceOne", "deleteOne", "deleteMany", "findAndModify", "findOneAndUpdate", "findOneAndDelete", "drop", "dropDatabase", "createIndex", "dropIndex"]
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### 推荐配置示例
|
|
275
|
+
|
|
276
|
+
生产库推荐:
|
|
277
|
+
|
|
278
|
+
```json
|
|
279
|
+
{
|
|
280
|
+
"type": "mysql",
|
|
281
|
+
"url": "mysql://user:password@prod-db:3306/app",
|
|
282
|
+
"readonly": true,
|
|
283
|
+
"blacklist": ["drop", "truncate", "delete", "update", "insert", "alter", "create"],
|
|
284
|
+
"keepAliveSeconds": 180
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
允许写入的专用连接推荐:
|
|
289
|
+
|
|
290
|
+
```json
|
|
291
|
+
{
|
|
292
|
+
"type": "postgres",
|
|
293
|
+
"url": "postgres://user:password@write-db:5432/app",
|
|
294
|
+
"readonly": false,
|
|
295
|
+
"blacklist": ["drop", "truncate", "alter"],
|
|
296
|
+
"keepAliveSeconds": 180
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## Oracle SQLcl
|
|
301
|
+
|
|
302
|
+
官方链接:https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/
|
|
303
|
+
|
|
304
|
+
Oracle 默认使用 npm 包 `oracledb`。如果目标 Oracle 版本较老,可能出现 Thin mode 不兼容错误,例如 `NJS-138`。此时可以将单个 Oracle 配置切换为 SQLcl:
|
|
305
|
+
|
|
306
|
+
```json
|
|
307
|
+
{
|
|
308
|
+
"type": "oracle",
|
|
309
|
+
"url": "oracle://USER:password@127.0.0.1:1521/qftest201",
|
|
310
|
+
"oracleDriver": "sqlcl",
|
|
311
|
+
"sqlclPath": "/opt/homebrew/Caskroom/sqlcl/26.1.0.086.1709/sqlcl/bin/sql",
|
|
312
|
+
"javaHome": "/Applications/IntelliJ IDEA Ultimate.app/Contents/jbr/Contents/Home",
|
|
313
|
+
"readonly": true,
|
|
314
|
+
"blacklist": ["drop", "truncate", "delete", "update", "insert", "merge", "alter", "create"]
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
SQLcl 模式会通过 stdin 传入连接脚本,避免密码出现在命令行参数列表中。安全检查仍在执行前完成,黑名单和只读模式都会生效。
|
|
319
|
+
|
|
320
|
+
## 更新
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
npm install -g agent-database-cli@latest
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## 卸载和清理
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
npm uninstall -g agent-database-cli
|
|
330
|
+
npm cache clean --force
|
|
331
|
+
rm -rf ~/.agent-database-cli
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
## 许可证
|
|
335
|
+
|
|
336
|
+
[MIT](LICENSE)
|
|
337
|
+
|
|
338
|
+
## 友情链接
|
|
339
|
+
|
|
340
|
+
- [LINUX DO - 新的理想型社区](https://linux.do/)
|