可用性校验

Usability Check

关于此功能

可用性校验提供数据库连接校验和权限校验的功能。您可以通过可用性校验同时实现连接验证和权限验证,即同时测试数据库能否连接成功以及数据库权限校验是否通过,以获得支持/可用的连接模式信息(读取模式+写入模式统称)。

可用性校验用户流

操作步骤

  1. 您可以在节点的基本配置中点击「可用性校验」按钮进行可用性校验。校验结果将记入日志。

  2. 校验将先检测数据库连接情况。数据库连接成功后,进入权限验证;数据库如连接失败,将提示您数据库连接失败,不进入权限验证。 当校验时间超过3分钟,将以弹窗形式提示您「节点可用性校验超时,请重新操作。」校验结果除了「超时」的状态以外均用右上角提示窗展示。

  3. 可用性校验后,连接模式将显示哪些读取模式和写入模式可用。

  4. 您也可以在完成节点基本配置后,通过保存后的提示弹窗进行上述可用性校验流程。(如果您在配置节点后已进行了可用性校验,后立即保存,将不弹出是否进行可用性校验提示弹窗。)

◎ 连接验证

  • 数据库连接验证失败的两种情况:

    • 节点未找到服务器,请检查服务器地址和端口或用户名

    • 节点用户名或密码输入有误,请重新输入

◎ 权限验证

  • 权限验证失败的两种情况:

    • 执行SQL语句失败,权限验证失败

    • 执行SQL语句成功,权限缺失,权限验证失败

  • 具体权限信息:

    • MySQL

节点类型
连接模式
用户权限
执行的SQL语句
执行SQL失败的结果提示
执行SQL成功,权限缺失的结果提示

MySQL

获取版本信息

获取DB版本信息

select version()

数据库连接成功,获取数据库版本信息失败!

JDBC-读取模式

相关视图和表的 select 权限

SHOW GRANTS

数据库连接成功,获取权限信息查询失败 – 检查缺失权限失败!

数据库连接成功,权限验证失败,缺少权限:SELECT

数据库连接成功,权限验证失败,缺少权限:REPLICATION SLAVE, REPLICATION CLIENT

MySQL

BINLOG-读取模式

相关视图和表的 select 权限, replication slave, replication client

版本校验大于8

数据库连接成功,该版本不支持binlog

SHOW VARIABLES LIKE 'log_bin'

数据库连接成功,获取参数log_bin失败 – 缺少SELECT权限!

数据库连接成功,权限验证失败,未开启log_bin=on

SHOW VARIABLES LIKE 'binlog_format'

数据库连接成功,获取参数binlog_format失败 – 缺少SELECT权限!

数据库连接成功,权限验证失败,未开启binlog_format=row

JDBC-写入模式

SELECT 权限, CREATE OBJECT 权限, ALTER/ INSERT / UPDATE / DELETE TABLE;

SHOW GRANTS

数据库连接成功,获取权限信息查询失败 – 缺少SELECT权限

数据库连接成功,权限验证失败,缺少权限:ALTER,DELETE,CREATE,UPDATE,INSERT

Oracle

获取版本信息

获取DB版本信息

SELECT DISTINCT VERSION FROM product_component_version

数据库连接成功,获取数据库版本信息查询失败!

JDBC-读取模式

相关视图和表的 select 权限

null

DataPipeline Oracle采集代理-读取模式

需要DBA权限;

agent的web控制台需要sysdba的角色用户

url请求:getTopicPrefix

数据库连接成功,备端状态获取失败!

数据库连接成功,权限验证失败:请求系统信息失败

数据库连接成功,权限验证失败:Oracle采集代理目的地端已经绑定了另一个topic前缀

SELECT supplemental_log_data_min,supplemental_log_data_all FROM v$database

数据库连接成功,检查logminer log level失败!

数据库连接成功,权限验证失败: supplemental_log_data_min,supplemental_log_data_all

select * from v$locked_object where rownum = 1

数据库连接成功,Oracle采集代理获取查询v$locked_object权限失败

select * from dba_objects where rownum = 1

数据库连接成功,Oracle采集代理获取查询dba_objects失败

select * from v$database where rownum = 1

数据库连接成功,Oracle采集代理获取查询v$database失败

LogMiner-读取模式

select any transaction, logmining, execute on dbms_logmnr_d, execute on dbms_logmnr, execute on dbms_flashback, create session, resource, select any dictionary, flashck any table, execute_catalog_role, 以及相关视图和表的 select 权限

非SQL校验

数据库连接成功,权限验证失败:该版本不支持Logminer

SELECT GRANTED_ROLE FROM USER_ROLE_PRIVS

null

数据库连接成功,缺少权限: EXECUTE_CATALOG_ROLE

SELECT PRIVILEGE FROM user_sys_privs

数据库连接成功,权限验证失败,缺少权限:user_sys_privs

SELECT table_name FROM user_tab_privs u WHERE u.privilege='EXECUTE'

数据库连接成功,权限验证失败,缺少权限:user_tab_privs

SELECT LOG_MODE FROM v$database

数据库连接成功,检查log_mode失败!

数据库连接成功,权限验证失败:LOG_MODE不是ARCHIVELOG

SELECT supplemental_log_data_min,supplemental_log_data_all FROM v$database

数据库连接成功,检查logminer log level失败!

数据库连接成功,权限验证失败: supplemental_log_data_min,supplemental_log_data_all

SELECT name FROM v$archived_log WHERE STATUS = 'A' %s AND rownum=1 ORDER BY name DESC AND name is NOT NULL

数据库连接成功,检查v$archived_log失败!

数据库连接成功,权限验证失败:v$archived_log为空

SELECT name FROM v$archived_log WHERE STATUS = 'A' %s AND rownum=1 ORDER BY name DESC AND name NOT IN (%s)

execute CALL sys.dbms_logmnr.add_logfile(logfilename=>'%s',options=>dbms_logmnr.new)

数据库连接成功,LogMiner添加日志文件失败!

execute CALL sys.dbms_logmnr.start_logmnr(Options => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG)

数据库连接成功,LogMiner解析日志文件失败!

JDBC-写入模式

CREATE SESSION, RESOURCE, SELECT ON V_$SESSION

null

MS SQL Server

获取版本信息

获取DB版本信息

select @@version

数据库连接成功,获取数据库版本信息失败!

JDBC-读取模式

要求需要同步的表拥有增量识别字段,用于同步增量数据。选择的字段必须为可排序,例如数字或时间类型,推荐的字段类型一般为随数据更新而自增的字段,如:更新序列号(例: SequenceID),更新时间戳(例: UpdatedAt)

null

Change Tracking-读取模式

用户权限:select on table, view change tracking on table, view change tracking on schema

非SQL校验

数据库连接成功,权限验证失败:版本不支持CT

SELECT DB_NAME(database_id) each_db_name FROM sys.change_tracking_databases

数据库连接成功,查询数据库是否开启CT失败!

数据库连接成功,权限验证失败:数据库未开启CT

select NAME from master.dbo.sysdatabases

数据库连接成功,查询database失败!

数据库连接成功,权限验证失败:不存在支持CT的表

"" SELECT tbl.table_name table_name,convert(nvarchar(2000), prop.value) comment FROM [%1$s].[INFORMATION_SCHEMA].[TABLES] tbl LEFT JOIN [%1$s].[sys].[extended_properties] prop ON prop.major_id = object_id(tbl.table_schema + '.' + tbl.table_name) AND prop.minor_id = 0 WHERE tbl.TABLE_CATALOG='%1$s' and tbl.table_schema = '%2$s'""

数据库连接成功,获取表名信息查询失败!

select NAME from %s.sys.schemas

"" select schema_name = object_schema_name(ind.object_id) , table_name = t.name, index_name = ind.name, column_name = col.name, column_position = ic.index_column_id, collation = ic.is_descending_key, is_unique = ind.is_unique, index_type = ind.type_desc, is_primary_key = ind.is_primary_key from [%1$s].sys.indexes ind inner join [%1$s].sys.index_columns ic on ind.object_id = ic.object_id and ind.index_id = ic.index_id inner join ( select b.name as datatype, a.name, a.object_id, a.column_id, a.system_type_id, a.user_type_id from [%1$s].sys.columns a join [%1$s].sys.types b on a.system_type_id = b.system_type_id and a.user_type_id = b.user_type_id) col on ic.object_id = col.object_id and ic.column_id = col.column_id inner join [%1$s].sys.tables t on ind.object_id = t.object_id where ind.is_disabled = 0 and ind.object_id in (%2$s) ""

JDBC-写入模式

用户权限:insert / update / delete / alter / exec / create / references / select on schema / alter any connection

select 'BLANK',0 UNION ALL select '%1$s',Has_perms_by_name(DB_NAME(),'DATABASE','%1$s')

数据库连接成功,获取权限信息查询失败 --检查缺失权限失败!

数据库连接成功,权限验证失败,缺少权限:ALTER,DELETE,CREATE,UPDATE,INSERT

SELECT * FROM [%s].[sys].[schemas] WHERE [schema_id]<=2 OR [schema_id] BETWEEN 5 AND 16383

数据库连接成功,获取权限信息查询失败!

数据库连接成功,权限验证失败:Schema %s 不存在

Kafka

Kafka客户端-读取模式

具备需要进行读取topic的消费权限

Kafka客户端-写入模式

具备需要进行写入topic的消费权限

PostgreSQL

获取版本信息

获取DB版本信息

SHOW server_version

数据库连接成功,获取数据库版本信息失败!

JDBC-读取模式

相关视图和表的 select 权限

wal2json-读取模式

PostgreSQL replication 角色、PostgreSQL login 角色,需要同步的表的 select权限

非SQL校验

数据库连接成功,权限验证失败:版本不支持wal2json

QianBase

QianBaseCDC

查看是否开启Rangefeed功能

SHOW CLUSTER SETTING kv.rangefeed.enabled;

JDBC

相关视图和表的 SELECT 权限

IBM Db2

IBM Db2采集代理-读取模式

相应数据库的Date access 角色

TiDB

JDBC-写入模式

select, create object, insert, update, delete, drop, truncate, select on mysql.*

SELECT t.Select_priv,t.Insert_priv,t.Update_priv, t.Delete_priv,t.Create_priv,t.Alter_priv,t.Drop_priv FROM mysql.db t WHERE t.host='%s' AND t.user='%s' AND t.db='%s' LIMIT 1

数据库连接成功,获取权限信息查询失败! -- 检查缺失权限失败!

数据库连接成功,权限验证失败,缺少权限:Select_priv,Insert_priv,Delete_priv,Create_priv, Update_priv,Alter_priv,Drop_priv

Greenplum

获取版本信息

获取DB版本信息

SHOW server_version

数据库连接成功,获取数据库版本信息失败

JDBC-写入模式

select, create object, insert, update, delete, drop, truncate

select HAS_SCHEMA_PRIVILEGE('%s', 'CREATE')

数据库连接成功,检查权限失败!

数据库连接成功,权限验证失败,缺少权限:CREATE_SCHEMA,USAGE_SCHEMA

select HAS_SCHEMA_PRIVILEGE('%s', 'USAGE')

SequoiaDB

JDBC-写入模式

SequoiaDB对于用户的DML,DDL,DQL等操作并没有明确的权限划分,因此每个用户都具有相同权限,数据管理员(安装时创建,默认为sdbadmin)以及用户列表 SDB_LIST_USERS 中的所有用户 都可以在DataPipeline中新建数据节点。

null

Redshift

JDBC-写入模式

Redis

Redis客户端-写入模式

HDFS

HDFS客户端

根目录要存在; 根目录的读写权限

fileSystem.exists(path)

HDFS连接成功,无法判断路径是否存在

HDFS连接成功,权限验证失败,缺少权限:读

HDFS连接成功,权限验证失败,缺少权限:写

阿里云OSS

AliyunOSS-SDK

数据读取:需要拥有bucket 的private 或者 PublicReadWrite 或者 public-read权限。

数据写入:需要拥有对 bucket 的 Private 或者 PublicReadWrite 权限。

FTP

FTP客户端

注意事项

  • 未通过可用性校验的节点可以被链路选择。

  • 在数据链路里配置读取方式时,未进行或未通过可用性校验的节点在运行任务中可能会报错,请您谨慎选择。

最后更新于

这有帮助吗?