Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Db2 使用CLI SQLDriverConnection的隐式本地连接(无密码)失败,SQL30082N原因3密码丢失_Db2_Db2 Luw_Dataflex - Fatal编程技术网

Db2 使用CLI SQLDriverConnection的隐式本地连接(无密码)失败,SQL30082N原因3密码丢失

Db2 使用CLI SQLDriverConnection的隐式本地连接(无密码)失败,SQL30082N原因3密码丢失,db2,db2-luw,dataflex,Db2,Db2 Luw,Dataflex,我正在使用DB2CLI/ODBCAPI接口进行编码。视窗10 如果在连接字符串中提供用户名和密码(UID/PWD)密钥,我可以使函数正常工作,并可以连接到任何本地或远程数据库。 这部分工作正常 例如,如果我的连接字符串类似于“DSN=SAMPLE;UID=xxxxx;PWD=yyyyy”,则连接工作正常 但是根据,Db2应该支持隐式本地连接(当应用程序与db服务器在同一主机上运行时),并且您应该能够连接到本地db,而不提供用户/pwd信息 服务器代码检测连接是本地连接还是远程连接。对于本地连接,

我正在使用DB2CLI/ODBCAPI接口进行编码。视窗10

如果在连接字符串中提供用户名和密码(UID/PWD)密钥,我可以使函数正常工作,并可以连接到任何本地或远程数据库。 这部分工作正常

例如,如果我的连接字符串类似于“DSN=SAMPLE;UID=xxxxx;PWD=yyyyy”,则连接工作正常

但是根据,Db2应该支持隐式本地连接(当应用程序与db服务器在同一主机上运行时),并且您应该能够连接到本地db,而不提供用户/pwd信息

服务器代码检测连接是本地连接还是远程连接。对于本地连接,当验证为服务器时,验证成功不需要用户ID和密码

在本地,使用clpconnect命令,它还隐式地工作
db2connecttosample
,而不传递密码。这证明服务器配置正确。(身份验证设置为服务器)

但是,当使用应用程序CLI代码尝试相同的方法时,如果我只在连接字符串中提供DSN(db名称),则会收到SQL30082N原因3密码丢失错误。我尝试了以下几种变体:

DSN=SAMPLE;
DSN=SAMPLE;UID=;PWD=;
DSN=SAMPLE=UID=;
DSN=SAMPLE=UID='';PWD='';
DSN=sample; UID=; PWD=; AUTOCOMMIT=0; CONNECTTYPE=1;
它们都以相同的SQLstate失败。密码丢失

我错过了什么

---PS----

为了进行测试,我可以使用不同的编程接口使其正常工作,比如使用IBM.Data.Db2.Net provider的Powershell

# $dbFactory = [System.Data.Common.DbProviderFactories]::GetFactory('IBM.Data.DB2')
# $connection = $dbFactory.CreateConnection()
# $connection.ConnectionString = "Database=SAMPLE" 
# $connection.Open()

# $connection 
...
ConnectionString                     : Database=SAMPLE
Database                             : SAMPLE
IsOpen                               : True
...
DataSource                           : SAMPLE
UserId                               : Samuel
ClientUser                           :
ClientWorkStation                    : Samuel-ALW
InternalClientWorkStation            : Samuel-ALW
...
来自powershell的隐式连接列为db2 db的应用程序:

# db2 list applications for db sample

Auth Id  Application    Appl.      Application Id                                                 DB       # of
         Name           Handle                                                                    Name    Agents
-------- -------------- ---------- -------------------------------------------------------------- -------- -----
SAMUEL   powershell.exe 5316       *LOCAL.DB2.210103171916                                        SAMPLE   1
为什么在CLI中使用SQLDriverConnect时不能使用它?

它对我来说是正确的(db2luv11.5.5.0)

它还可以在带有DB2LUV11.5.4.0的Win10上正常工作

我使用的代码与IBM提供的示例程序
dbconn.c
中的代码相同(可从github、Db2知识中心和DB2LUW实例的samples目录中获得)。它显示了三种方法,包括
SQLDriverConnect
(这是我在本地测试的方法)

我注意到当它工作时,
printf()
报告的连接字符串是:
DSN=样本;UID=;PWD=;自动提交=0;连接类型=1

因此,我给您的建议是,尝试构建并运行IBM示例程序(
samples/cli/dbconn.c
-可能需要对文件/build稍作修改,因为IBM似乎无法在samples目录中保持其示例代码的最新状态,在github上可能有所不同)。IBM提供了示例脚本来构建位于同一目录树中的这些程序(
bldapp
etc)

要进行故障排除,请仔细检查如何定义要连接的别名。具体检查目录和(对于IBM提供的驱动程序)
db2dsdriver.cfg
内容,必要时手动创建后者。SQL30082N原因3将导致非本地数据库


您还可以使用CLI跟踪来观察封面下发生的事情,有关运行
db2trc
命令、转储其输出、将其二进制输出格式化为可读文本等的详细信息,请参阅Db2知识中心。

1st,感谢@mao的帮助。我在另一个工作站上执行了另一个干净的安装,它在那里工作。所以,我原来的系统出了问题

几天/几个小时后,我终于在@Mitchell Waite的帮助下找到了问题

cli驱动程序为此数据库提供了默认用户名,但没有密码,因此出现密码丢失错误

默认UID来自包含以下内容的db2cli.ini文件:

[SAMPLE]
DBALIAS=SAMPLE
UID=samuel
我不记得手动创建它,但我想这是在我使用ODBC DSN windows GUI进行一些测试时实现的


无论如何,从这个条目中删除UID,或者删除整个[SAMPLE]部分,它又开始工作了,正如预期的那样

你好,毛,我不是在用C语言。我需要设置一个C编译器来测试这些示例。您是如何编译这些样本的,如有任何指导,将不胜感激。ThanksI还测试了此连接字符串。原来忘了提了。我正在查看这些cli示例,并将其用作指南。这个“dbconn.c”非常简单,我也在做同样的事情,只是使用了一种也支持加载CLI LIB的不同语言。如果我提供用户名和密码,连接工作正常,这证明该语言正确地调用了cli层。好的,我们能够编译dbconn示例!它在我的系统上不工作,我得到完全相同的错误。密码丢失。我称之为
dbconn sample |连接到数据库sample…|[IBM][CLI驱动程序]SQL30082N安全处理失败,原因为“3”(“密码丢失”)。SQLSTATE=08001
。我正在运行免费版
“DB2V11.5.0.1077”
,如果我提供用户名和密码,它就可以工作。