Flink CDC Oracle 用户权限不足 ORA-01031: insufficient privileges

Flink CDC Oracle用户权限不足
版本:flink1.14.5 、flinkcdc 2.2.1、oracle11g、
场景:flink cdc 实时抽取oracle的数据表。DBA为了数据库安全考虑,对访问用户权限进行控制。将oracle的flinkuser用户XE下的orders表授权只读权限给readuser用户。授权情况如下:

create user readuser identified by '123456';
grant create session,execute_catalog_role,select_catalog_role to readuser;
grant select on flinkuser.orders to readuser;

此时执行flink oracle cdc 任务:

CREATE TABLE `default_catalog`.`default_database`.`orders` (
  `ORDER_ID` INT NOT NULL,
  `ORDER_DATE` TIMESTAMP(0),
  `CUSTOMER_NAME` VARCHAR(2147483647),
  `PRICE` DECIMAL(10, 5),
  `PRODUCT_ID` INT,
  `ORDER_STATUS` INT,
  CONSTRAINT `PK_2016962539` PRIMARY KEY (`ORDER_ID`) NOT ENFORCED
) WITH (
  'debezium.log.mining.continuous.mine' = 'true',
  'hostname' = '192.168.1.188',
  'password' = '123456',
  'debezium.log.mining.strategy' = 'online_catalog',
  'connector' = 'oracle-cdc',
  'port' = '1521',
  'database-name' = 'XE',
  'schema-name' = 'flinkuser',
  'table-name' = 'orders',
  'username' = 'readuser'
);

select * from orders;

taskmanger执行报错提示:

com.ververica.cdc.connectors.shaded.org.apache.kafka.connect.errors.ConnectException: An exception occurred in the change event producer. This connector will be stopped.
	at io.debezium.pipeline.ErrorHandler.setProducerThrowable(ErrorHandler.java:42)
	at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:127)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: io.debezium.DebeziumException: com.ververica.cdc.connectors.shaded.org.apache.kafka.connect.errors.ConnectException: Snapshotting of table XE.FLINKUSER.ORDERS failed
	at io.debezium.pipeline.source.AbstractSnapshotChangeEventSource.execute(AbstractSnapshotChangeEventSource.java:82)
	at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:110)
	... 5 more
Caused by: com.ververica.cdc.connectors.shaded.org.apache.kafka.connect.errors.ConnectException: Snapshotting of table XE.FLINKUSER.ORDERS failed
	at io.debezium.relational.RelationalSnapshotChangeEventSource.createDataEventsForTable(RelationalSnapshotChangeEventSource.java:389)
	at io.debezium.relational.RelationalSnapshotChangeEventSource.createDataEvents(RelationalSnapshotChangeEventSource.java:305)
	at io.debezium.relational.RelationalSnapshotChangeEventSource.doExecute(RelationalSnapshotChangeEventSource.java:138)
	at io.debezium.pipeline.source.AbstractSnapshotChangeEventSource.execute(AbstractSnapshotChangeEventSource.java:71)
	... 6 more
Caused by: java.sql.SQLSyntaxErrorException: ORA-01031: insufficient privileges

	at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:509)
	at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:461)
	at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1104)
	at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:550)
	at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:268)
	at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:655)
	at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:229)
	at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:41)
	at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:765)
	at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:983)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
	at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1362)
	at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:369)
	at io.debezium.relational.RelationalSnapshotChangeEventSource.createDataEventsForTable(RelationalSnapshotChangeEventSource.java:340)
	... 9 more
Caused by: Error : 1031, Position : 26, Sql = SELECT * FROM "FLINKUSER"."ORDERS" AS OF SCN 8483955, OriginalSql = SELECT * FROM "FLINKUSER"."ORDERS" AS OF SCN 8483955, Error Msg = ORA-01031: insufficient privileges

	at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:513)
	... 22 more

初看,readuser用户没有读取表权限,但是已经授权表权限且通过dbeaver可以查询数据表。上向定位到debezium,百度发现debezium 采集数据是需要归档及logminer查询权限。尝试赋权:

grant flashback on flinkuser.orders to readuser;
grant select any transaction,select any dictionary to readuser;
grant select on SYSTEM.LOGMNR_COL$ to readuser;
grant select on SYSTEM.LOGMNR_OBJ$ to readuser;
grant select on SYSTEM.LOGMNR_USER$ to readuser;
grant select on SYSTEM.LOGMNR_UID$ to readuser;
grant select on V_$DATABASE to readuser;

重新运行任务,taskmanager执行依然报错权限不足,不过换了报错提示:
Caused by: Error : 1031, Position : 0, Sql = CREATE TABLE LOG_MINING_FLUSH(LAST_SCN NUMBER(19,0)), OriginalSql = CREATE TABLE LOG_MINING_FLUSH(LAST_SCN NUMBER(19,0)), Error Msg = ORA-01031: insufficient privileges at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:513) ... 24 more
可见此处readuser没有建表权限,授权建表权限。

grant resource to readuser;

resource角色权限如下:
在这里插入图片描述
授权完成后再次执行flink cdc任务,此时没有报错能正常抽取数据:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Flink CDC Oracle是基于FlinkOracle Change Data Capture(CDC)功能,用于实时采集Oracle数据库的数据变更。它使用了debezium框架,并利用Oracle数据库自带的logminer技术来实现数据采集。 在配置Flink CDC Oracle时,需要注意的是,如果Oracle的dbName配置的是SID而不是service_name,可能会导致连接失败。解决这个问题的方法是将jdbc链接字符串改为jdbc:oracle:thin:@localhost:1521:sid的方式。你可以通过API方式或Flink SQL方式手动指定这个链接字符串,例如使用基于API的方式可以设置properties.put("database.url","jdbc:oracle:thin:@localhost:1521:sid")。 总结来说,Flink CDC Oracle是用于实时采集Oracle数据库数据变更的工具,它基于Flink并使用debezium和Oracle的logminer技术实现。在配置时需要注意正确设置链接字符串,特别是当dbName配置为SID时。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [flink1.14.3 cdc jar包](https://download.csdn.net/download/weixin_46661903/84678566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Flink Oracle CDC Connector源码解读](https://blog.csdn.net/IT_xhf/article/details/130364090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值