通过 pyodbc 和 Linux使用 Docker访问 i 系列 AS400 数据库时出现问题

如何解决通过 pyodbc 和 Linux使用 Docker访问 i 系列 AS400 数据库时出现问题

我正在使用 Fast API 和 Docker 测试 API。当我加载网页时,它会尝试使用通过 pyodbc 设置的 AS400 连接运行查询。

我从错误开始:pyodbc.InterfaceError: ('28000','[28000] [IBM][System i Access ODBC Driver]Communication link failure. comm rc=8051 - CWBSY1011 - Kerberos client credentials not found

所以我安装了 krb5 并创建了一张票。然后重新加载网页,我遇到的新错误是 pyodbc.InterfaceError: ('28000','[28000] [IBM][System i Access ODBC Driver]Communication link failure. comm rc=8052 - CWBSY1012 - Kerberos service principal not found for system SYSTEM,其中 SYSTEM 是我的 AS400 系统名称。

有没有其他人遇到过这种情况?似乎 AS400 要求我在连接时使用 Kerberos,但随后我进行了设置,但系统没有 Kerberos 服务主体。

我是否可能需要完全使用 instructions found here 加入域?我开始了这个过程,但是我遇到了一个错误:Failed to join domain: Not enough storage is available to process this command. 尝试运行 net ads join 时,我假设这是由于 Docker 镜像太小了;所以我认为这是不可能的。

这是我的 ODBC.ini 配置文件:

[QDSN_ASW]
Description=ASW
Driver=iSeries Access ODBC Driver
System=192.168.100.1
UserID=user
Password=pass
Naming=0
DefaultLibraries=QGPL
Database=1492BFDD
ConnectionType=2
CommitMode=2
ExtendedDynamic=0
DefaultPkgLibrary=QGPL
DefaultPackage=A/DEFAULT(IBM),2,1,512
AllowDataCompression=1
LibraryView=0
AllowUnsupportedChar=0
ForceTranslation=0
Trace=0
Trusted_Connection=no
AuthenticationType=No Authentication

解决方法

多亏了this post on stackoverflow,我才能解决这个问题。

基本上,我最初构建的数据库连接(如下所示)似乎过于复杂和不必要。

 class CommitMode:
     NONE = 0  # Commit immediate (*NONE)  --> QSQCLIPKGN
     CS = 1  # Read committed (*CS)        --> QSQCLIPKGS
     CHG = 2  # Read uncommitted (*CHG)    --> QSQCLIPKGC
     ALL = 3  # Repeatable read (*ALL)     --> QSQCLIPKGA
     RR = 4  # Serializable (*RR)          --> QSQCLIPKGL


 class ConnectionType:
     ReadWrite = 0  # Read/Write (all SQL statements allowed)
     ReadCall = 1  # Read/Call (SELECT and CALL statements allowed)
     Readonly = 2  # Read-only (SELECT statements only)


 def connstr(system,commitmode=None,connectiontype=ConnectionType.Readonly):
     _connstr =  'DRIVER=iSeries Access ODBC Driver;'+ \
                 'SYSTEM='+system+';'+\
                 'SIGNON=4;CCSID=1208;TRANSLATE=1;'
     if commitmode is not None:
         _connstr = _connstr + 'CommitMode=' + str(commitmode) + ';'
     if connectiontype is not None:
         _connstr = _connstr +'ConnectionType=' + str(connectiontype) + ';'

     return _connstr

并且我能够将其简化为:

system = f"SYSTEM=AS400;DRIVER=iSeries Access ODBC Driver;SERVER=192.168.100.0;PORT=446;DATABASE=AS400;UID={user};PWD={pw}"

现在,当我构建 Docker 映像并加载网页时,它会立即查询数据库,无需 Kerberos 身份验证。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res