大更新:
1、完善SQL语法 2、移除node前端,只保留静态资源 3、写好安装脚本 4、做好linux适配
This commit is contained in:
1 parent
687c012841
commit
df6d348995
166 files changed
+16317
-10763
No files matched your search
+142
@@ -0,0 +1,142 @@
|
||||
# 命令与选项
|
||||
|
||||
## 一共有几个可执行文件
|
||||
|
||||
| 命令 | 作用 | 选项 |
|
||||
| ---- | ---- | ---- |
|
||||
| `chusql-storage` | 存储进程:页面与索引、WAL | 只有 `--config <path>` |
|
||||
| `chusql-web` | Web 管理端:REST 接口 + 浏览器里的数据库 IDE | 见「`chusql-web` 选项」 |
|
||||
| `csql` | 命令行客户端,直连存储进程,不经过 HTTP | 见「`csql` 选项」 |
|
||||
| `csql-web` | 一键启动器:按配置拉起存储进程 + Web,日志写 `<install-dir>/logs` | 无选项(`host`/`port` 从配置读) |
|
||||
|
||||
四个命令共用同一份 [`chusql.toml`](config.md);`--config` 都是用来临时读另一份配置的。
|
||||
|
||||
## `csql` 选项
|
||||
|
||||
csql [options]
|
||||
|
||||
| 选项 | 默认 | 说明 |
|
||||
| ---- | ---- | ---- |
|
||||
| `-u, --user USER` | 配置里的管理员 | 用这个账号登录 |
|
||||
| `-p, --password` | — | 强制交互输入口令,忽略配置里的 |
|
||||
| `-d, --database DB` | 不选(启动后没有默认库) | 登录后直接选中哪个库 |
|
||||
| `-f, --format FORMAT` | `table` | 输出格式:`table` / `json` / `csv` |
|
||||
| `-e, --execute SQL` | — | 跑一条语句就退出(脚本化用) |
|
||||
| `--history FILE` | `~/.chusql_history` | 历史文件位置 |
|
||||
| `--pipe NAME` | 配置 `[server] pipe_name` | 端点名(Windows 具名管道 / Unix 套接字文件) |
|
||||
| `--storage SERVER` | — | 端点没人应答时,拉起这个存储进程可执行文件 |
|
||||
| `--config FILE` | 固定位置的 `chusql.toml` | 读另一份配置 |
|
||||
| `-h, --help` | — | 帮助 |
|
||||
|
||||
脚本化示例:
|
||||
|
||||
csql -e "SELECT count(*) FROM orders" -f json
|
||||
csql -u analyst -p -d sales -f csv -e "SELECT * FROM orders LIMIT 5"
|
||||
|
||||
## 交互模式
|
||||
|
||||
- 提示符 `chusql>`;语句以**分号**结尾,可以跨多行;上下键翻历史(默认存 `~/.chusql_history`)。
|
||||
- 退出码:语句出错时非 0,方便在脚本里判断。
|
||||
|
||||
### 元命令
|
||||
|
||||
| 元命令 | 作用 |
|
||||
| ------ | ---- |
|
||||
| `\q` `\quit` | 退出 |
|
||||
| `\?` `\h` `\help` | 帮助 |
|
||||
| `\l` `\list` | 列出数据库 |
|
||||
| `\dt` `\d` | 列出当前库的表 |
|
||||
| `\d <表>` | 看表结构 |
|
||||
| `\dr` `\roles` | 角色总览:授权对象与成员(管理员专属,等价于 Web 的 `GET /api/roles`) |
|
||||
| `\c <库>` | 切换数据库 |
|
||||
| `\f` `\format <fmt>` | 切换输出格式:`table` / `json` / `csv` |
|
||||
|
||||
普通身份用 `\dt` 时只会看到自己有 `SELECT` 权限的表,系统表永远不出现。
|
||||
|
||||
## 账号与权限
|
||||
|
||||
账号:root(配置里的 `user` / `password` 决定,见 [config.md](config.md))是管理员,其余都是普通账号,
|
||||
默认**零权限**,只能看到被授权的表。系统库 `system`(账号表在里面)只有管理员能进。
|
||||
|
||||
服务启动后**只有系统库**,没有任何默认工作库:自己 `CREATE DATABASE shop` 再 `USE shop`。
|
||||
没选库时只有"限定名"语句能跑(`SELECT * FROM shop.items`),裸表名(`SELECT * FROM items`)会报
|
||||
`no database selected`——先把库选上。
|
||||
|
||||
CREATE USER alice IDENTIFIED BY 'secret'; -- 普通账号,口令是明文,服务端加盐派生
|
||||
ALTER USER alice IDENTIFIED BY 'new-secret'; -- 改口令
|
||||
DROP USER alice;
|
||||
|
||||
`CREATE USER` / `ALTER USER` / `DROP USER` 只有管理员能执行(Web 端在 SQL 控制台,命令行直接跑)。
|
||||
|
||||
权限按**角色**给,三句话:
|
||||
|
||||
CREATE ROLE analyst; -- 建角色(平的角色,不可继承)
|
||||
GRANT SELECT, INSERT ON orders TO analyst; -- 授权:对象可以是表名或 *
|
||||
GRANT analyst TO alice; -- 把角色给账号
|
||||
REVOKE INSERT ON orders FROM analyst; -- 收回权限
|
||||
REVOKE analyst FROM alice; -- 收回角色
|
||||
DROP ROLE analyst;
|
||||
|
||||
| 权限 | 覆盖 |
|
||||
| ---- | ---- |
|
||||
| `SELECT` | `SELECT`(含 JOIN、投影、`WHERE` 里的子查询) |
|
||||
| `INSERT` | `INSERT`(含 `VALUES` 里的子查询) |
|
||||
| `UPDATE` | `UPDATE`(含赋值与 `WHERE` 里的子查询) |
|
||||
| `DELETE` | `DELETE`(含 `WHERE` 里的子查询) |
|
||||
| `ALL` | 上面四种,等价于逐条授权 |
|
||||
|
||||
- 对象写 `*` 表示当前库里所有表;写表名时按**当前库**限定(在 `sales` 库执行 `GRANT ... ON orders`
|
||||
授权的是 `sales.orders`),换库要重新授权。
|
||||
- 管理员(root)隐式拥有全部权限,不用授权;DDL(建表、建索引等)一律只有管理员能做。
|
||||
- 角色语句本身只有管理员能跑;普通账号跑 `\dr` / `GET /api/roles` 会被拒(`administrator required`)。
|
||||
- 授权变更立即生效;已经登录的会话不会被踢下线。
|
||||
- 当前限制:没有列级授权,没有 `WITH GRANT OPTION`,角色不可继承,也没有自助查询(普通账号不能自己
|
||||
看自己的授权,得问管理员)。
|
||||
|
||||
Web 端对应的接口是 `/api/roles` 系列(`GET` 列表、`POST` 建角色、`DELETE /api/roles/:name` 删角色、
|
||||
`POST/DELETE /api/roles/:name/grants` 授权/收权、`POST/DELETE /api/roles/:name/members[/:user]` 成员),
|
||||
全部管理员专属。
|
||||
|
||||
## `chusql-web` 选项
|
||||
|
||||
chusql-web [options]
|
||||
|
||||
| 选项 | 对应配置键 | 默认 |
|
||||
| ---- | ---------- | ---- |
|
||||
| `--config FILE` | — | 固定位置的 `chusql.toml` |
|
||||
| `--host H` | `[web] host` | `127.0.0.1` |
|
||||
| `--port N` | `[web] port` | `7777` |
|
||||
| `--static DIR` | `[web] static_dir` | `static` |
|
||||
| `--user NAME` | `[web] user` | `root` |
|
||||
| `--storage SERVER` | `[web] storage_server` | — |
|
||||
| `--cookie-secure BOOL` | `[web] cookie_secure` | `false` |
|
||||
| `--body-limit N` | `[web] body_limit` | `65536` |
|
||||
| `--session-idle N` | `[web] session_idle` | `28800` |
|
||||
| `--session-max N` | `[web] session_max` | `86400` |
|
||||
| `--login-max-attempts N` | `[web] login_max_attempts` | `5` |
|
||||
| `--login-window N` | `[web] login_window` | `300` |
|
||||
| `--page-size N` | `[web] rows_per_page` | `25` |
|
||||
| `--max-page-size N` | `[web] max_page_size` | `500` |
|
||||
| `--max-rows N` | `[web] max_rows` | `1000` |
|
||||
| `--max-sql-length N` | `[web] max_sql_length` | `20000` |
|
||||
| `--seed BOOL` | `[web] seed` | `false` |
|
||||
| `-h, --help` | — | 帮助 |
|
||||
|
||||
REST 接口(界面的一键操作全走结构化接口):
|
||||
|
||||
| 分组 | 接口 |
|
||||
| ---- | ---- |
|
||||
| 探活(无需登录) | `GET /api/health`、`GET /api/status` |
|
||||
| 会话 | `POST /api/login`、`POST /api/logout`、`GET /api/session` |
|
||||
| 设置 | `GET`/`PUT /api/settings`、`GET`/`PUT /api/ui-settings` |
|
||||
| 库 | `GET`/`POST /api/databases`、`DELETE /api/databases/:name` |
|
||||
| 表 | `GET`/`POST /api/tables`、`GET`/`DELETE /api/tables/:t` |
|
||||
| 行 | `GET`/`POST /api/tables/:t/rows`、`PATCH`/`DELETE /api/tables/:t/rows/:id` |
|
||||
| 索引与列 | `POST /api/tables/:t/indexes`、`DELETE /api/tables/:t/indexes/:col`、`DELETE /api/tables/:t/columns/:col` |
|
||||
| 演示数据 | `POST /api/demo-data` |
|
||||
| SQL 控制台 | `POST /api/query`(`CREATE USER` / `CREATE ROLE` / `GRANT` 也在这里跑) |
|
||||
| 角色 | `GET`/`POST /api/roles`、`DELETE /api/roles/:name`、`POST`/`DELETE /api/roles/:name/grants`、`POST`/`DELETE /api/roles/:name/members[/:user]` |
|
||||
|
||||
除探活、登录和首页(`GET /`、`GET /static/:file`)外都要带会话 Cookie。选库用 `X-ChuSQL-Database` 头:
|
||||
**不带这个头就是"没选库"**,此时只有限定名语句(`db.table`)能跑,裸表名会得到 400 `no_database`;
|
||||
`GET /api/databases` 和 `POST`/`DELETE /api/databases/:name` 不需要选库。普通身份碰 `system` 库一律 403。
|
||||
Reference in new issue
Block a user