数据库

表单查询的数据库,每个数据库都通过一个数据库凭据连接

  1. 本节内容
  2. 工作原理
  3. 升级到 7.5.0
  4. 正在使用的凭据
  5. 谁可以管理数据库
  6. 配置种子
  7. REST API

面向管理员:为表单查询的数据库命名,选择每个数据库用于连接的凭据,并测试它们。


本节内容

页面 内容
数据库页面 数据库列表、其各列,以及添加数据库的对话框
单个数据库的页面 数据库的各个选项卡、查询它的表单、测试连接和删除
表单中的数据库 字段的 dbConfig 如何指定数据库,以及 7.5.0 之前编写的表单

工作原理

从 7.5.0 起,数据库 是一个独立的连接,在 连接 > 数据库 下添加,位于 密钥库 和 运行器 之间。 它包含三项:

字段 含义
名称 字段的 dbConfig 用来查询它的名称,例如 cmdb
描述 它的用途
凭据 它用于连接的 连接 > 凭据 中类型为 数据库 的凭据

与连接有关的一切仍和以前一样保存在凭据中:数据库类型(MySQL、MSSQL、PostgreSQL、Oracle 或 MongoDB)、 主机和端口、数据库名称、TLS,以及用户和密码,它们以加密形式保存,或从 密钥库 读取。 数据库本身不保存地址,也不保存密钥,因此数据库和运行器以同样的方式选择凭据。

字段通过在 dbConfig 中指定数据库来查询它:

- name: city
  type: enum
  dbConfig: cmdb            # a database of Connections > Databases
  query: select name from cmdb.city

不是数据库的名称会像 7.5.0 之前一样,作为类型为数据库的凭据来查找,因此旧表单无需修改即可继续 工作(参见 表单中的数据库)。


升级到 7.5.0

升级会一次性填充 连接 > 数据库,因此现有表单无需修改即可继续工作。

它为每个类型为数据库的凭据创建一个数据库,使用该凭据的名称和描述,并通过该凭据连接。dbConfig 中指定该凭据的 表单现在会找到同名的数据库,而该数据库通过同一个凭据连接:结果相同。凭据保留其所有字段。

升级只运行一次:之后删除的数据库不会再次创建,之后添加的数据库凭据在你自己添加数据库之前 没有对应的数据库。


正在使用的凭据

数据库用于连接的凭据处于使用中,就像运行器用于登录的凭据一样。

只要有数据库引用它,就不能删除或重命名,其页面的 使用者 选项卡会列出这些数据库(参见 正在使用的凭据)。删除数据库时,其凭据保持不变。


谁可以管理数据库

数据库遵循其所引用凭据的角色选项。

列表、数据库的页面及其 API 需要 showSettings 或 showConnectionsSettings 角色选项,与凭据相同。 只有管理员才能让数据库使用只有管理员可以引用的凭据连接,例如从密钥库读取密码的凭据(参见 谁可以修改凭据):查询它的表单会使用该凭据连接,而 测试连接 会把它的密钥发送到其服务器。其他用户仍可以使用它已引用的凭据再次保存数据库。

在 配置种子 中声明的数据库在其页面上为只读:请改为在种子文件中修改。


配置种子

种子在 databases: 部分中声明其数据库,位于它们所引用的凭据之后。

每一项有一个 name、一个类型为数据库的 credential,以及可选的 description。凭据可以来自同一种子的 credentials 部分,也可以是在应用中创建的凭据:

credentials:
  items:
    - name: cmdb-login
      credential_type: database
      db_type: mysql
      host: cmdb.example.com
      port: 3306
      user: svc_forms
      password: ${SEED_CMDB_PW}

databases:
  items:
    - name: cmdb                 # the name a field's dbConfig gives
      description: The CMDB
      credential: cmdb-login     # a credential of type database

完整内容参见 示例,种子如何管理其声明的对象参见 托管对象。


REST API

脚本通过 REST API 在 /api/v2/database 下管理数据库,所需角色选项与页面相同。

调用 作用
GET /api/v2/database 列出数据库,每个都带有其凭据的数据库类型、数据库、主机和端口,以及查询它的表单数量(used_by_count)
GET /api/v2/database?name=<name> 获取该名称的数据库
GET /api/v2/database/<id> 获取一个数据库
POST /api/v2/database 添加数据库:其 name、credential 以及可选的 description
PUT /api/v2/database/<id> 修改数据库
DELETE /api/v2/database/<id> 删除数据库;其凭据保留
POST /api/v2/database/<id>/check 使用其凭据测试连接
curl -X POST https://forms.example.com/api/v2/database \
  -H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
  -d '{ "name": "cmdb", "description": "The CMDB", "credential": "cmdb-login" }'

不存在或类型不是数据库的 credential 会以 400 被拒绝。每次修改都会写入审计日志。