配置数据源采集账号权限
元数据采集账号必须能够连接目标数据源,并读取逆向插件所需的系统目录、对象定义和指定 Schema。权限不足时,连接测试仍可能成功,但采集会失败、只返回部分对象,或缺少视图、存储过程、主外键和索引等信息。
数据库授权由数据库管理员执行。优先建立专用只读账号,按目标数据库和 Schema 授予最小权限,不使用业务应用账号,也不把管理员角色作为默认方案。下面的授权示例已按 DAM 元数据抽取和逆向所需能力整理,账号名、数据库名、Schema 名和密码必须替换为当前环境的值。不同数据库版本、认证方式和插件版本可能需要补充系统目录权限,执行前应由 DBA 审核。
区分元数据权限和数据读取权限
| 使用目的 | 需要的能力 | 是否读取业务记录 |
|---|---|---|
| 测试连接 | 登录目标数据库或服务 | 否 |
| 逆向元数据 | 读取系统目录、对象定义、Schema、表、字段、视图、过程、函数、约束和索引等 | 通常不需要读取表中记录 |
| 采样或数据探查 | 对指定表或视图执行受限查询 | 是 |
| 质量检核或其他任务 | 按任务 SQL 读取目标字段和记录 | 是 |
如果项目只需要结构采集,不应因为采样功能存在就默认授予全部业务表查询权限。确需采样时,应限定允许读取的库、Schema、表、行数和账号使用范围。
按数据库类型准备权限
| 数据库类型 | 元数据逆向重点 | 需要额外确认的内容 |
|---|---|---|
| MySQL | 目标库对象定义及引用关系;限定库时按库授权 | 是否需要视图定义、例程和采样数据 |
| Oracle | 建立会话并读取数据字典 | 是否跨 Schema;是否需要读取表数据 |
| 达梦 | 读取数据字典、视图、序列和目标对象 | 授权范围是否限定到目标模式 |
| SQL Server | 读取目标数据库中的对象定义和依赖信息 | 不应直接把 db_owner 当作通用最小权限,由 DBA 按版本拆分只读权限 |
| Hive、Impala | 访问目标 Database 及其对象 | 元数据服务、Kerberos 或平台权限是否同时满足 |
| PostgreSQL、Greenplum | 连接目标库、使用目标 Schema、读取系统目录 | 采样时再增加目标表 SELECT;新增表的默认权限是否需要配置 |
| openGauss | 读取 pg_catalog 中逆向所需目录 | 目录视图范围是否与当前插件版本匹配 |
| MongoDB | 对目标 Database 读取集合及结构信息 | 是否允许样本读取;认证库是否正确 |
| Vertica、ClickHouse、Doris 等 | 读取目标 Schema 或 Database 的结构信息 | 按内部清单和当前插件说明确认具体权限 |
上表说明授权目标,不替代数据库厂商或项目的正式授权脚本。对于生产环境,DBA 应先审查授权语句,再在限定范围内执行。
授权语句参考
以下命令用于说明授权范围和对象,不包含任何真实账号或密码。命令中的 user_name、database_name、schema_name 和 password 均为占位符。
MySQL
全库结构和数据读取:
GRANT SELECT ON *.* TO 'user_name'@'%';限定一个数据库:
GRANT SELECT ON database_name.* TO 'user_name'@'%';
GRANT REFERENCES ON database_name.* TO 'user_name'@'%';如果只采集结构,先由 DBA 按插件实际读取的系统表授予目录权限;需要采样时再授予目标表的 SELECT,不要直接扩大到所有业务库。
Oracle
Oracle 逆向至少需要建立会话并读取数据字典:
CREATE USER user_name IDENTIFIED BY "password";
GRANT CREATE SESSION TO user_name;
GRANT SELECT ANY DICTIONARY TO user_name;如果只采集指定 Schema,优先使用项目批准的对象级授权方案,并确认跨 Schema 视图、存储过程和依赖关系是否需要额外读取权限。
达梦
常用的元数据和对象读取权限参考:
CREATE USER user_name IDENTIFIED BY "password";
GRANT SELECT ANY DICTIONARY,
SELECT ANY MATERIALIZED VIEW,
SELECT ANY SEQUENCE,
SELECT ANY VIEW,
SELECT ANY TABLE TO user_name;生产环境应结合目标模式收窄范围;指定数据库的授权脚本由 DBA 按当前达梦版本确认。
SQL Server
采集账号需要能够读取目标数据库的对象定义和依赖信息。内部适配示例使用数据库级读取角色:
USE database_name;
ALTER ROLE [db_datareader] ADD MEMBER [user_name];
GRANT VIEW DEFINITION TO [user_name];部分旧环境使用 db_owner 作为快速验证方式,但该角色权限过大,不应直接作为生产默认配置。验证完成后应由 DBA 按目标库、Schema 和对象范围改为最小权限。
Hive 和 Impala
限定数据库的读取示例:
GRANT SELECT ON DATABASE database_name TO USER user_name;还需确认 Hive Metastore、认证方式、Kerberos 或平台权限已满足插件连接要求。不同发行版的授权入口可能不同。
PostgreSQL 和 Greenplum
创建账号并准备系统目录和目标 Schema 的读取权限:
CREATE USER user_name;
ALTER USER user_name WITH PASSWORD 'password';
GRANT CONNECT ON DATABASE database_name TO user_name;
GRANT USAGE ON SCHEMA schema_name TO user_name;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO user_name;
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name
GRANT SELECT ON TABLES TO user_name;逆向插件还需要读取 pg_catalog 中与当前版本匹配的对象目录。采样权限只授予批准的目标 Schema 或表。Greenplum 按 PostgreSQL 方案准备后,再结合集群版本验证。
openGauss
逆向所需的目录读取示例:
GRANT SELECT ON pg_catalog.pg_namespace TO user_name;
GRANT SELECT ON pg_catalog.pg_class TO user_name;
GRANT SELECT ON pg_catalog.pg_attribute TO user_name;
GRANT SELECT ON pg_catalog.pg_proc TO user_name;
GRANT SELECT ON pg_catalog.pg_constraint TO user_name;
GRANT SELECT ON pg_catalog.pg_inherits TO user_name;
GRANT SELECT ON pg_catalog.pg_index TO user_name;
GRANT SELECT ON pg_catalog.pg_type TO user_name;
GRANT SELECT ON pg_catalog.pg_roles TO user_name;
GRANT SELECT ON pg_catalog.pg_user TO user_name;
GRANT SELECT ON pg_catalog.pg_extension TO user_name;再按目标库和 Schema 配置连接、使用 Schema 及目标表读取权限,并用小范围对象验证当前插件版本是否还需要其他目录。
MongoDB
对指定数据库授予读取角色:
db.grantRolesToUser(
"user_name",
[{ role: "read", db: "database_name" }]
);连接时确认认证数据库、目标数据库和账号所属用户域一致。若启用采样,按组织要求控制可读取的集合和样本范围。
Vertica、ClickHouse 和 Doris
Vertica 的 Schema 读取示例:
GRANT SELECT ON SCHEMA schema_name TO user_name;ClickHouse 的读取示例:
GRANT SELECT ON *.* TO user_name;Doris 的单库读取示例:
CREATE USER 'user_name'@'%' IDENTIFIED BY 'password';
GRANT SELECT_PRIV ON database_name.* TO 'user_name'@'%';Doris 全库授权只适合经过审批的管理场景。Vertica、ClickHouse 和 Doris 的对象目录、视图及采样需求仍需按实际插件版本验证。
MaxCompute
MaxCompute 需要配置 Endpoint、Access ID、Access Key 和 Project Name,并在项目侧授予元数据读取权限。Access Key 不得写入手册、截图或共享文档;应通过安全配置或密钥管理方式提供给数据源连接。
授权与验证步骤
- 确认本次要采集的应用系统、数据库、Schema、对象类型,以及是否需要采样。
- 创建专用采集账号,设置符合组织要求的密码轮换、来源地址和有效期策略。
- 根据数据库类型和逆向插件,只授予连接、系统目录及目标对象所需权限。
- 在 DAM 数据源中使用该账号测试连接。连接成功只证明登录可用,不代表逆向权限完整。
- 创建只包含少量已知对象的采集任务,执行后核对表、字段、视图、存储过程、函数、主外键和索引数量。
- 如需采样,再对批准的目标表补充数据读取权限,并使用少量记录验证。
- 验证通过后扩大采集范围,记录账号、授权范围、插件版本和验证日期,供后续变更复核。
逆向失败或不完整时排查
| 现象 | 优先检查 |
|---|---|
| 连接测试失败 | 网络、地址、端口、认证方式、账号状态和登录权限 |
| 连接成功但没有对象 | 系统目录权限、目标库/Schema 范围、逆向插件和账号默认库 |
| 只有表和字段,缺少视图或过程 | 对象定义、例程或系统目录权限是否完整 |
| 只能采集部分 Schema | 账号可见范围、采集筛选、白名单及跨 Schema 权限 |
| 结构采集成功但采样失败 | 目标表 SELECT 权限、行级安全策略及查询限制 |
| 权限补充后结果仍未变化 | 是否重新执行采集、任务是否仍使用旧账号、缓存或插件是否需要重新加载 |
不要通过反复增加全局权限来试错。先从任务日志确认失败对象和读取动作,再由 DBA 补充对应的最小权限,并重新执行小范围采集。
