跳转至

为观测云数据转发配置 Doris 用户权限

观测云数据转发功能通过 Apache Doris Stream Load 方式将数据写入 Doris 数据库。为确保数据能正常导入,需要在 Doris 中为观测云创建具备相应权限的用户。

确认你的角色

请选择适合你的操作路径:


前置条件

  • 已部署 Apache Doris 集群(1.2.x 及以上版本)
  • 已确定目标数据库名称(如 guance_data
  • 已确定目标表名(如 log_archive,或由观测云自动创建)
  • Doris FE 的 HTTP 端口(默认 8030)对观测云服务可达

最小权限说明

观测云数据转发 Doris 用户需要以下权限:

权限 用途 是否必须
INSERT_PRIV 向目标表插入数据
LOAD_PRIV 数据写入权限(包含 Insert、Delete 等),覆盖 Stream Load 场景 是(与 INSERT_PRIV 同时授予,确保兼容性)
CREATE_PRIV 若使用「自动创建表」功能,需创建表 自动建表场景必须
权限关系

Doris 官方文档明确 Stream Load 最小权限为 INSERT_PRIVLOAD_PRIV 是更宽泛的数据写入权限包(包含 Insert、Delete 等),同时授予可确保各版本兼容性。CREATE_PRIV 仅在观测云自动建表时需要。


路径 A:管理员操作步骤

步骤一:连接 Doris 管理节点

通过 MySQL 客户端连接 Doris FE 管理端口:

mysql -h <Doris_FE_IP> -P 9030 -u root -p
注意

管理操作使用 MySQL 协议端口(默认 9030),而非 HTTP 端口(8030)。HTTP 端口仅用于 Stream Load 数据导入。

步骤二:创建目标数据库(如不存在)

CREATE DATABASE IF NOT EXISTS guance_data;

步骤三:创建专用用户

CREATE USER 'guance_writer'@'%' IDENTIFIED BY 'your_secure_password';
建议
  • 用户名建议包含 guance 前缀,便于识别用途
  • 密码建议 16 位以上,包含大小写字母、数字和特殊字符
  • '%' 表示允许任意 IP 连接。若需限制来源,可改为观测云服务出口 IP 或网段,如 'guance_writer'@'10.0.0.%'

步骤四:授权

场景 A:使用「自动创建表」(推荐)

观测云将根据数据类型自动创建目标表,需授予数据库级权限:

-- 授予数据库级权限(包含建表、导入)
GRANT CREATE_PRIV, INSERT_PRIV, LOAD_PRIV ON guance_data.* TO 'guance_writer'@'%';

场景 B:使用「已有表」

目标表已提前创建,只需授予表级写入权限:

-- 授予表级权限(导入)
GRANT INSERT_PRIV, LOAD_PRIV ON guance_data.log_archive TO 'guance_writer'@'%';
注意

若需写入多张表,可对每张表分别授权,或使用 guance_data.* 授权整个数据库。

步骤五:验证权限

1. 验证用户登录

mysql -h <Doris_FE_IP> -P 9030 -u guance_writer -p

输入密码后能正常登录,说明用户创建成功。

2. 查看用户权限

SHOW GRANTS FOR 'guance_writer'@'%';

预期输出应包含:

+--------------------------------------------------+
| Grants for guance_writer@%                       |
+--------------------------------------------------+
| GRANT INSERT_PRIV, LOAD_PRIV ON guance_data.*    |
| GRANT CREATE_PRIV ON guance_data.*               |  -- 仅自动建表场景
+--------------------------------------------------+

3. 验证 Stream Load(可选)

使用 curl 模拟 Stream Load 请求(与观测云后端行为一致):

curl --location-trusted -u guance_writer:your_secure_password \
  -H "label:test_guance_001" \
  -H "format:json" \
  -H "strip_outer_array:true" \
  -X PUT \
  http://<Doris_FE_IP>:8030/api/guance_data/log_archive/_stream_load \
  -d '{"host":"test","message":"hello"}'

预期返回:

{
    "Status": "Success",
    "NumberLoadedRows": 1,
    "NumberFilteredRows": 0
}
注意

若返回 FailLabel Already Exists,请检查网络连通性和 label 唯一性。


路径 B:给 DBA 的一键授权脚本

如果你不是 Doris 管理员,请将以下脚本完整复制,发送给公司 DBA 或运维同事执行。

-- ============================================
-- 观测云数据转发 - Doris 用户授权脚本
-- 
-- 请 DBA 执行后,将以下信息反馈给申请人:
--   1. 确认用户已创建:guance_writer
--   2. 确认数据库已创建:guance_data(或申请人指定的库名)
--   3. 确认 FE 的 HTTP 端口 8030 对观测云服务开放
-- ============================================

-- 步骤 1:创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS guance_data;

-- 步骤 2:创建专用用户(请修改密码为强密码)
CREATE USER IF NOT EXISTS 'guance_writer'@'%' IDENTIFIED BY '请替换为强密码';

-- 步骤 3:授权
-- 若需要观测云自动创建表(推荐):
GRANT CREATE_PRIV, INSERT_PRIV, LOAD_PRIV ON guance_data.* TO 'guance_writer'@'%';

-- 若表已存在,仅需要写入权限(取消下行注释,注释上行):
-- GRANT INSERT_PRIV, LOAD_PRIV ON guance_data.* TO 'guance_writer'@'%';

-- 步骤 4:验证(可选)
SHOW GRANTS FOR 'guance_writer'@'%';

DBA 执行后请确认

  • 用户 guance_writer 已创建且未锁定

  • 数据库 guance_data 已存在

  • 权限已生效(SHOW GRANTS 输出包含 INSERT_PRIV, LOAD_PRIV

  • Doris FE 的 HTTP 端口(8030)对观测云服务网络可达

验证方式(推荐:观测云界面)

优先使用观测云界面验证,无需手动 curl:

  1. 登录观测云控制台 → 管理 → 数据转发 → 新建规则
  2. 步骤一:填写规则名称
  3. 步骤二:定义转发规则(可选,如筛选条件)
  4. 步骤三:
    • 存档类型选择 Apache Doris
    • 填写连接地址(如 192.168.1.1:8030
    • 填写数据库名(如 guance_data
    • 填写用户名(如 guance_writer
    • 填写密码
    • 填写目标表名(如 log_archive
  5. 点击「测试连接」按钮

验证结果判断

提示 含义 下一步
连接成功 权限和网络均正常 继续完成规则配置
连接超时 网络不通或端口错误 检查防火墙、确认 8030 端口开放
认证失败 用户名或密码错误 检查密码是否含特殊字符、确认用户存在
权限不足 缺少 INSERT_PRIV / LOAD_PRIV / CREATE_PRIV 让 DBA 重新执行授权脚本
表不存在 自动建表失败 确认用户有 CREATE_PRIV 权限,或改为「使用已有表」并手动建表

权限回收(如需删除)

-- 撤销所有权限
REVOKE ALL PRIVILEGES ON guance_data.* FROM 'guance_writer'@'%';

-- 删除用户
DROP USER 'guance_writer'@'%';

常见问题

Q1:测试连接提示「认证失败」

排查步骤: 1. 确认观测云配置中的用户名、密码与 Doris 中创建的一致 2. 确认密码未包含特殊字符导致转义问题(如 @#$ 等,建议用引号包裹或避免) 3. 确认用户未被锁定:

```sql
SELECT user, host, password_expired FROM mysql.user WHERE user='guance_writer';
```

Q2:测试连接提示「权限不足」

排查步骤

  1. 在 Doris 中执行 SHOW GRANTS FOR 'guance_writer'@'%' 确认权限已授予
  2. 若使用「自动创建表」,确认已授予 CREATE_PRIV 权限
  3. 若使用「已有表」,确认已对该表授予 INSERT_PRIVLOAD_PRIV 权限
  4. 确认观测云配置中的数据库名、表名与授权对象一致

Q3:Stream Load 返回「Fail」但权限已配置

排查步骤

  1. 检查 Doris BE 节点是否可访问(Stream Load 经 FE 重定向到 BE)
  2. 检查目标表是否存在(自动创建表场景下,首次写入会自动建表)
  3. 检查表字段类型是否与数据兼容(严格模式下类型不匹配会失败)
  4. 检查 label 是否重复(同一 label 24 小时内不可重复使用)

Q4:使用「自动创建表」时建表失败

排查步骤

  1. 确认用户具备 CREATE_PRIV 权限
  2. 确认数据库已存在(CREATE DATABASE IF NOT EXISTS
  3. 确认表名不冲突(系统使用 CREATE TABLE IF NOT EXISTS,不会覆盖已有表)
  4. 检查 Doris 集群磁盘空间是否充足

Q5:观测云提示「连接超时」

排查步骤

  1. 确认 Doris FE 的 HTTP 地址和端口(8030)填写正确
  2. 确认观测云服务到 Doris 的网络可达(防火墙、安全组、VPC 对等连接等)
  3. 若 Doris 在内网,确认观测云工作空间与 Doris 在同一网络环境或已打通网络

最小权限速查表

场景 所需权限 SQL 示例
自动创建表 + 写入 CREATE_PRIV, INSERT_PRIV, LOAD_PRIV GRANT CREATE_PRIV, INSERT_PRIV, LOAD_PRIV ON db.* TO 'user'@'%'
仅写入已有表 INSERT_PRIV, LOAD_PRIV GRANT INSERT_PRIV, LOAD_PRIV ON db.table TO 'user'@'%'

参考文档


文档评价

文档内容是否对您有帮助? ×