为观测云数据转发配置 Doris 用户权限¶
观测云数据转发功能通过 Apache Doris Stream Load 方式将数据写入 Doris 数据库。为确保数据能正常导入,需要在 Doris 中为观测云创建具备相应权限的用户。
确认你的角色¶
请选择适合你的操作路径:
- 路径 A:我是 Doris 管理员(有
root或ADMIN权限)→ 直接执行 SQL 授权 - 路径 B:我不是管理员,需要找 DBA/运维同事帮忙 → 复制一键脚本给 DBA
前置条件¶
- 已部署 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_PRIV。LOAD_PRIV 是更宽泛的数据写入权限包(包含 Insert、Delete 等),同时授予可确保各版本兼容性。CREATE_PRIV 仅在观测云自动建表时需要。
路径 A:管理员操作步骤¶
步骤一:连接 Doris 管理节点¶
通过 MySQL 客户端连接 Doris FE 管理端口:
注意
管理操作使用 MySQL 协议端口(默认 9030),而非 HTTP 端口(8030)。HTTP 端口仅用于 Stream Load 数据导入。
步骤二:创建目标数据库(如不存在)¶
步骤三:创建专用用户¶
建议
- 用户名建议包含
guance前缀,便于识别用途 - 密码建议 16 位以上,包含大小写字母、数字和特殊字符
'%'表示允许任意 IP 连接。若需限制来源,可改为观测云服务出口 IP 或网段,如'guance_writer'@'10.0.0.%'
步骤四:授权¶
场景 A:使用「自动创建表」(推荐)¶
观测云将根据数据类型自动创建目标表,需授予数据库级权限:
-- 授予数据库级权限(包含建表、导入)
GRANT CREATE_PRIV, INSERT_PRIV, LOAD_PRIV ON guance_data.* TO 'guance_writer'@'%';
场景 B:使用「已有表」¶
目标表已提前创建,只需授予表级写入权限:
注意
若需写入多张表,可对每张表分别授权,或使用 guance_data.* 授权整个数据库。
步骤五:验证权限¶
1. 验证用户登录¶
输入密码后能正常登录,说明用户创建成功。
2. 查看用户权限¶
预期输出应包含:
+--------------------------------------------------+
| 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"}'
预期返回:
注意
若返回 Fail 或 Label 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:
- 登录观测云控制台 → 管理 → 数据转发 → 新建规则
- 步骤一:填写规则名称
- 步骤二:定义转发规则(可选,如筛选条件)
- 步骤三:
- 存档类型选择 Apache Doris
- 填写连接地址(如
192.168.1.1:8030) - 填写数据库名(如
guance_data) - 填写用户名(如
guance_writer) - 填写密码
- 填写目标表名(如
log_archive)
- 点击「测试连接」按钮
验证结果判断:
| 提示 | 含义 | 下一步 |
|---|---|---|
| 连接成功 | 权限和网络均正常 | 继续完成规则配置 |
| 连接超时 | 网络不通或端口错误 | 检查防火墙、确认 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:测试连接提示「权限不足」¶
排查步骤:
- 在 Doris 中执行
SHOW GRANTS FOR 'guance_writer'@'%'确认权限已授予 - 若使用「自动创建表」,确认已授予
CREATE_PRIV权限 - 若使用「已有表」,确认已对该表授予
INSERT_PRIV和LOAD_PRIV权限 - 确认观测云配置中的数据库名、表名与授权对象一致
Q3:Stream Load 返回「Fail」但权限已配置¶
排查步骤:
- 检查 Doris BE 节点是否可访问(Stream Load 经 FE 重定向到 BE)
- 检查目标表是否存在(自动创建表场景下,首次写入会自动建表)
- 检查表字段类型是否与数据兼容(严格模式下类型不匹配会失败)
- 检查 label 是否重复(同一 label 24 小时内不可重复使用)
Q4:使用「自动创建表」时建表失败¶
排查步骤:
- 确认用户具备
CREATE_PRIV权限 - 确认数据库已存在(
CREATE DATABASE IF NOT EXISTS) - 确认表名不冲突(系统使用
CREATE TABLE IF NOT EXISTS,不会覆盖已有表) - 检查 Doris 集群磁盘空间是否充足
Q5:观测云提示「连接超时」¶
排查步骤:
- 确认 Doris FE 的 HTTP 地址和端口(8030)填写正确
- 确认观测云服务到 Doris 的网络可达(防火墙、安全组、VPC 对等连接等)
- 若 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'@'%' |