yearning-cli 0.1.5__tar.gz
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.
- yearning_cli-0.1.5/.gitignore +10 -0
- yearning_cli-0.1.5/.python-version +1 -0
- yearning_cli-0.1.5/PKG-INFO +192 -0
- yearning_cli-0.1.5/README.md +177 -0
- yearning_cli-0.1.5/mysql_proxy/README.md +32 -0
- yearning_cli-0.1.5/mysql_proxy/__init__.py +1 -0
- yearning_cli-0.1.5/mysql_proxy/protocol.py +342 -0
- yearning_cli-0.1.5/mysql_proxy/server.py +661 -0
- yearning_cli-0.1.5/pyproject.toml +33 -0
- yearning_cli-0.1.5/uv.lock +236 -0
- yearning_cli-0.1.5/yearning_cli/__init__.py +1 -0
- yearning_cli-0.1.5/yearning_cli/__main__.py +3 -0
- yearning_cli-0.1.5/yearning_cli/cli.py +459 -0
- yearning_cli-0.1.5/yearning_cli/client.py +636 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.11
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: yearning-cli
|
|
3
|
+
Version: 0.1.5
|
|
4
|
+
Summary: Yearning MySQL Audit Platform CLI Tool
|
|
5
|
+
Project-URL: Homepage, https://github.com/la3rence/yearning-cli
|
|
6
|
+
Project-URL: Repository, https://github.com/la3rence/yearning-cli
|
|
7
|
+
Author: la3rence
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
Requires-Python: >=3.11
|
|
10
|
+
Requires-Dist: msgpack>=1.1.2
|
|
11
|
+
Requires-Dist: openpyxl>=3.1
|
|
12
|
+
Requires-Dist: requests>=2.31
|
|
13
|
+
Requires-Dist: websocket-client>=1.9.0
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
|
|
16
|
+
# yearning-cli
|
|
17
|
+
|
|
18
|
+
Yearning MySQL 审计平台命令行工具。无需打开 Web 界面,直接在终端执行 SQL 查询、浏览元数据、导出结果。
|
|
19
|
+
|
|
20
|
+
## 安装
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
uv sync
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
安装后 `sql` 命令全局可用。
|
|
27
|
+
|
|
28
|
+
如需安装到本机命令行:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
uv tool install .
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
如果本机已安装过旧版本,使用当前项目代码强制替换:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
uv tool install --force --reinstall .
|
|
38
|
+
hash -r
|
|
39
|
+
sql --version
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 配置
|
|
43
|
+
|
|
44
|
+
### 1. 环境变量(Yearning 连接信息)
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
export YEARNING_URL=http://your-yearning-server
|
|
48
|
+
export YEARNING_USER=your_username
|
|
49
|
+
export YEARNING_PASS=your_password
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 2. 默认数据源(~/.sqlrc)
|
|
53
|
+
|
|
54
|
+
创建 `~/.sqlrc` 设置默认数据源和数据库,避免每次手动指定:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
source: 你的数据源名称
|
|
58
|
+
database: 你的数据库名
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
如果希望 token 过期后自动重新登录,也可以把 Yearning 登录凭据放到 `~/.sqlrc`:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
yearning_user: your_username
|
|
65
|
+
yearning_pass: your_password
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
配置后,所有子命令会自动使用这些默认值。
|
|
69
|
+
|
|
70
|
+
## 命令速查
|
|
71
|
+
|
|
72
|
+
### 查看版本
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
sql --version
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 登录
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
sql login
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 浏览元数据
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
sql sources # 列出所有数据源
|
|
88
|
+
sql sources --idc 生产 # 按 IDC 筛选
|
|
89
|
+
sql databases # 列出默认数据源的数据库
|
|
90
|
+
sql databases "数据源名称" # 列出指定数据源的数据库
|
|
91
|
+
sql tables # 列出默认库的表
|
|
92
|
+
sql tables "数据源" 数据库名 # 列出指定库的表
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 执行查询
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
sql query 'SELECT * FROM some_table LIMIT 10'
|
|
99
|
+
sql query 'SELECT ...' "数据源" 数据库名 # 覆盖默认值
|
|
100
|
+
sql query 'SELECT ...' --json # JSON 输出
|
|
101
|
+
sql query 'SELECT ...' --timeout 60 # 超时 60 秒
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### 导出结果到 ~/Downloads/
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
sql query 'SELECT ...' -o # 默认 xlsx
|
|
108
|
+
sql query 'SELECT ...' -o csv # CSV 格式
|
|
109
|
+
sql query 'SELECT ...' -o json # JSON 格式
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 交互式 SQL Shell
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
sql shell
|
|
116
|
+
sql shell "数据源名称" 数据库名 # 覆盖默认值
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Shell 内快捷命令:
|
|
120
|
+
|
|
121
|
+
| 命令 | 说明 |
|
|
122
|
+
|------|------|
|
|
123
|
+
| `\s` / `\d` | 列出所有数据库 |
|
|
124
|
+
| `\s dbname` | 切换数据库 |
|
|
125
|
+
| `\t` | 列出当前库所有表 |
|
|
126
|
+
| `exit` / `quit` / `\q` | 退出 |
|
|
127
|
+
|
|
128
|
+
### MySQL 协议代理
|
|
129
|
+
|
|
130
|
+
启动代理服务器,让 DBeaver/Navicat/MySQL CLI 等客户端通过 Yearning 执行查询:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
sql proxy # 启动代理(默认监听 0.0.0.0:3307)
|
|
134
|
+
sql proxy --port 3308 # 自定义端口
|
|
135
|
+
sql proxy --host 127.0.0.1 # 仅允许本机连接
|
|
136
|
+
sql proxy --host :: # 监听 IPv6 全网卡(系统支持时可同时接受 IPv4)
|
|
137
|
+
sql proxy -v # 详细日志
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
连接方式:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# MySQL CLI
|
|
144
|
+
mysql -h 127.0.0.1 -P 3307 -u 数据源名 数据库名
|
|
145
|
+
# 反向代理或其他机器请连接运行 sql proxy 的机器 IP,例如 192.168.x.x:3307
|
|
146
|
+
|
|
147
|
+
# DBeaver / Navicat 等图形客户端
|
|
148
|
+
# Host: 127.0.0.1 / 机器局域网 IP / 反代入口 Port: 3307 Username: 数据源名称 Password: 留空
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
代理参数:
|
|
152
|
+
|
|
153
|
+
| 参数 | 说明 | 默认值 |
|
|
154
|
+
|------|------|--------|
|
|
155
|
+
| `--host` | 绑定地址;IPv4 全网卡为 `0.0.0.0`,IPv6 全网卡为 `::` | 0.0.0.0 |
|
|
156
|
+
| `--port` | 监听端口 | 3307 |
|
|
157
|
+
| `--source` | 数据源名称或 ID | 从 ~/.sqlrc 读取 |
|
|
158
|
+
| `--database` | 默认数据库名 | 从 ~/.sqlrc 读取 |
|
|
159
|
+
| `--url` | Yearning URL | 从环境变量读取 |
|
|
160
|
+
| `--user` | 要求认证的用户名 | 无 |
|
|
161
|
+
| `--password` | 要求的认证密码 | 无 |
|
|
162
|
+
|
|
163
|
+
### 调试
|
|
164
|
+
|
|
165
|
+
任意命令加 `-v` 或 `--verbose` 查看调试信息:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
sql query 'SELECT 1' -v
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
本地开发阶段不需要重新安装,可直接用 `uv run` 运行当前工作区代码:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
uv run sql proxy -v --port 3307
|
|
175
|
+
uv run sql query 'SELECT 1'
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
代理连接测试:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
mysql -h 127.0.0.1 -P 3307 -u 数据源名 数据库名 -e "SELECT 1"
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## 工作原理
|
|
185
|
+
|
|
186
|
+
- 通过 HTTP API 登录 Yearning 获取 Bearer Token
|
|
187
|
+
- 查询前自动创建查询工单(支持自动审批模式)
|
|
188
|
+
- 通过 WebSocket + msgpack 协议执行 SQL 并获取结果
|
|
189
|
+
- `sql proxy` 将 MySQL 协议转换为 Yearning API 调用,兼容各类 MySQL 客户端
|
|
190
|
+
- 代理会延迟初始化 Yearning,并缓存短期元数据和查询工单状态,降低客户端反复连接时的等待
|
|
191
|
+
- Token 持久化到 `~/.yearning_state`,后续命令自动复用;如果 token 过期或无效,会使用 `YEARNING_USER`/`YEARNING_PASS` 或 `~/.sqlrc` 中的 `yearning_user`/`yearning_pass` 自动登录,最多尝试 2 次
|
|
192
|
+
- 查询工单可用状态也会短期写入 `~/.yearning_state`,频繁关闭再启动代理时可减少重复准备工单
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# yearning-cli
|
|
2
|
+
|
|
3
|
+
Yearning MySQL 审计平台命令行工具。无需打开 Web 界面,直接在终端执行 SQL 查询、浏览元数据、导出结果。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
uv sync
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
安装后 `sql` 命令全局可用。
|
|
12
|
+
|
|
13
|
+
如需安装到本机命令行:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
uv tool install .
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
如果本机已安装过旧版本,使用当前项目代码强制替换:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
uv tool install --force --reinstall .
|
|
23
|
+
hash -r
|
|
24
|
+
sql --version
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 配置
|
|
28
|
+
|
|
29
|
+
### 1. 环境变量(Yearning 连接信息)
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
export YEARNING_URL=http://your-yearning-server
|
|
33
|
+
export YEARNING_USER=your_username
|
|
34
|
+
export YEARNING_PASS=your_password
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 2. 默认数据源(~/.sqlrc)
|
|
38
|
+
|
|
39
|
+
创建 `~/.sqlrc` 设置默认数据源和数据库,避免每次手动指定:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
source: 你的数据源名称
|
|
43
|
+
database: 你的数据库名
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
如果希望 token 过期后自动重新登录,也可以把 Yearning 登录凭据放到 `~/.sqlrc`:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
yearning_user: your_username
|
|
50
|
+
yearning_pass: your_password
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
配置后,所有子命令会自动使用这些默认值。
|
|
54
|
+
|
|
55
|
+
## 命令速查
|
|
56
|
+
|
|
57
|
+
### 查看版本
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
sql --version
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 登录
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
sql login
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 浏览元数据
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
sql sources # 列出所有数据源
|
|
73
|
+
sql sources --idc 生产 # 按 IDC 筛选
|
|
74
|
+
sql databases # 列出默认数据源的数据库
|
|
75
|
+
sql databases "数据源名称" # 列出指定数据源的数据库
|
|
76
|
+
sql tables # 列出默认库的表
|
|
77
|
+
sql tables "数据源" 数据库名 # 列出指定库的表
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 执行查询
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
sql query 'SELECT * FROM some_table LIMIT 10'
|
|
84
|
+
sql query 'SELECT ...' "数据源" 数据库名 # 覆盖默认值
|
|
85
|
+
sql query 'SELECT ...' --json # JSON 输出
|
|
86
|
+
sql query 'SELECT ...' --timeout 60 # 超时 60 秒
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 导出结果到 ~/Downloads/
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
sql query 'SELECT ...' -o # 默认 xlsx
|
|
93
|
+
sql query 'SELECT ...' -o csv # CSV 格式
|
|
94
|
+
sql query 'SELECT ...' -o json # JSON 格式
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 交互式 SQL Shell
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
sql shell
|
|
101
|
+
sql shell "数据源名称" 数据库名 # 覆盖默认值
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Shell 内快捷命令:
|
|
105
|
+
|
|
106
|
+
| 命令 | 说明 |
|
|
107
|
+
|------|------|
|
|
108
|
+
| `\s` / `\d` | 列出所有数据库 |
|
|
109
|
+
| `\s dbname` | 切换数据库 |
|
|
110
|
+
| `\t` | 列出当前库所有表 |
|
|
111
|
+
| `exit` / `quit` / `\q` | 退出 |
|
|
112
|
+
|
|
113
|
+
### MySQL 协议代理
|
|
114
|
+
|
|
115
|
+
启动代理服务器,让 DBeaver/Navicat/MySQL CLI 等客户端通过 Yearning 执行查询:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
sql proxy # 启动代理(默认监听 0.0.0.0:3307)
|
|
119
|
+
sql proxy --port 3308 # 自定义端口
|
|
120
|
+
sql proxy --host 127.0.0.1 # 仅允许本机连接
|
|
121
|
+
sql proxy --host :: # 监听 IPv6 全网卡(系统支持时可同时接受 IPv4)
|
|
122
|
+
sql proxy -v # 详细日志
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
连接方式:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# MySQL CLI
|
|
129
|
+
mysql -h 127.0.0.1 -P 3307 -u 数据源名 数据库名
|
|
130
|
+
# 反向代理或其他机器请连接运行 sql proxy 的机器 IP,例如 192.168.x.x:3307
|
|
131
|
+
|
|
132
|
+
# DBeaver / Navicat 等图形客户端
|
|
133
|
+
# Host: 127.0.0.1 / 机器局域网 IP / 反代入口 Port: 3307 Username: 数据源名称 Password: 留空
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
代理参数:
|
|
137
|
+
|
|
138
|
+
| 参数 | 说明 | 默认值 |
|
|
139
|
+
|------|------|--------|
|
|
140
|
+
| `--host` | 绑定地址;IPv4 全网卡为 `0.0.0.0`,IPv6 全网卡为 `::` | 0.0.0.0 |
|
|
141
|
+
| `--port` | 监听端口 | 3307 |
|
|
142
|
+
| `--source` | 数据源名称或 ID | 从 ~/.sqlrc 读取 |
|
|
143
|
+
| `--database` | 默认数据库名 | 从 ~/.sqlrc 读取 |
|
|
144
|
+
| `--url` | Yearning URL | 从环境变量读取 |
|
|
145
|
+
| `--user` | 要求认证的用户名 | 无 |
|
|
146
|
+
| `--password` | 要求的认证密码 | 无 |
|
|
147
|
+
|
|
148
|
+
### 调试
|
|
149
|
+
|
|
150
|
+
任意命令加 `-v` 或 `--verbose` 查看调试信息:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
sql query 'SELECT 1' -v
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
本地开发阶段不需要重新安装,可直接用 `uv run` 运行当前工作区代码:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
uv run sql proxy -v --port 3307
|
|
160
|
+
uv run sql query 'SELECT 1'
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
代理连接测试:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
mysql -h 127.0.0.1 -P 3307 -u 数据源名 数据库名 -e "SELECT 1"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## 工作原理
|
|
170
|
+
|
|
171
|
+
- 通过 HTTP API 登录 Yearning 获取 Bearer Token
|
|
172
|
+
- 查询前自动创建查询工单(支持自动审批模式)
|
|
173
|
+
- 通过 WebSocket + msgpack 协议执行 SQL 并获取结果
|
|
174
|
+
- `sql proxy` 将 MySQL 协议转换为 Yearning API 调用,兼容各类 MySQL 客户端
|
|
175
|
+
- 代理会延迟初始化 Yearning,并缓存短期元数据和查询工单状态,降低客户端反复连接时的等待
|
|
176
|
+
- Token 持久化到 `~/.yearning_state`,后续命令自动复用;如果 token 过期或无效,会使用 `YEARNING_USER`/`YEARNING_PASS` 或 `~/.sqlrc` 中的 `yearning_user`/`yearning_pass` 自动登录,最多尝试 2 次
|
|
177
|
+
- 查询工单可用状态也会短期写入 `~/.yearning_state`,频繁关闭再启动代理时可减少重复准备工单
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# MySQL 协议代理
|
|
2
|
+
|
|
3
|
+
MySQL 协议代理模块,让 DBeaver、Navicat、MySQL CLI 等客户端通过 Yearning 审计平台执行查询。
|
|
4
|
+
|
|
5
|
+
通过 `sql proxy` 子命令启动。详见 [主 README](../README.md#mysql-协议代理)。
|
|
6
|
+
|
|
7
|
+
## 原理
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
┌──────────────┐ MySQL协议 ┌──────────────┐ HTTP/WS ┌──────────────┐
|
|
11
|
+
│ MySQL 客户端 │ ────────────▶ │ sql proxy │ ────────────▶ │ Yearning │
|
|
12
|
+
│ (Navicat等) │ │ (3307端口) │ │ (审计平台) │
|
|
13
|
+
└──────────────┘ └──────────────┘ └──────────────┘
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
代理服务器默认监听 `0.0.0.0:3307`,将 MySQL 协议转换为 Yearning API 调用。需要仅允许本机访问时可启动 `sql proxy --host 127.0.0.1`;需要 IPv6 全网卡监听时可使用 `sql proxy --host ::`。
|
|
17
|
+
|
|
18
|
+
## 数据源切换
|
|
19
|
+
|
|
20
|
+
连接用户名 = 数据源名称。免密码登录,自动解析数据源:
|
|
21
|
+
|
|
22
|
+
| 用户名 | 行为 |
|
|
23
|
+
|--------|------|
|
|
24
|
+
| `数据源名称` | 精确匹配该数据源 |
|
|
25
|
+
| `root` / 任意不存在的名称 | 回退到 `~/.sqlrc` 配置的默认数据源 |
|
|
26
|
+
|
|
27
|
+
密码字段无需填写,任意值均可。
|
|
28
|
+
|
|
29
|
+
## 前提条件
|
|
30
|
+
|
|
31
|
+
1. 已运行 `sql login` 登录 Yearning,或已配置 `YEARNING_USER`/`YEARNING_PASS`、`~/.sqlrc` 的 `yearning_user`/`yearning_pass` 供 token 失效时自动登录
|
|
32
|
+
2. `~/.sqlrc` 配置了默认数据源(用于用户名不匹配时的回退)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""MySQL protocol proxy — connect MySQL clients to Yearning audit platform."""
|