使用OCI的Oracle钱包身份验证
Using Oracle Wallet authentication from OCI
我想知道是否有人成功地编写了一个使用Oracle OCI API并使用Oracle钱包进行身份验证的C/C++应用程序。
我已经使用mkstore成功创建了钱包,并将凭据存储在其中。我的tnsnames.ora和sqlnames.ora文件具有正确的内容,并且我的ORACLE_HOME和ORACLE_SID环境变量设置正确,因为我可以使用sqlplus/@XE成功地使用它验证sqlplus会话。
在同一个终端中,我创建了一个简单的C程序,用于分配OCIEnv、OCIServer、OCISvcError和OCIsvcCtx句柄并调用OCIEvcreate()。这一切都很好。
然后,我尝试调用任何一个"连接"函数,如OCILogon(也尝试了OCILogon2和OCSessionPoolCreate),但我总是得到"无效的用户名/密码"。我试图按照我所看到的为调用sqlplus定义的方式来调用它,即长度为0的空用户名和密码,以及长度适当的"XE"dbname。(为了完整起见,我还尝试了"@XE"answers"/@XE"的数据库名)
我看到有一个安全的API用于打开钱包并询问其内容,但我认为这是一个想要直接与钱包内容交互的应用程序(即添加/删除凭据等)。也许这是我错误的假设。。。
关于如何用程序实现这一点,几乎没有什么信息,所以如果有人有任何指针,或者有一个小的工作示例可以用这种方式简单地连接到数据库,我将不胜感激。
非常感谢
Ben
我也发现了这一点,关于如何用程序实现这一点的信息很少。我终于通过经验弄明白了。您似乎已经正确设置了sqlnet.ora和tnsnames.ora文件,所以您所需要做的就是修改代码,以便连接到服务器并启动会话。
当连接到服务器时,dblink文本字符串应该是tnsnames.ora中用于oracle钱包条目的连接字符串。在您的情况下为">XE"。
OCIServerAttach(OCIServer*srvhp,OCIError*errhp,CONST文本*dblink,sb4-dblink_ len,ub4模式)
开始会话时,credt应设置为OCI_CRED_EXT。这从外部验证凭据,并且由于SQLNET.ora中存在SQLNET.WALLET_OVERRIDE=TRUE,因此它使用oracle钱包来验证连接字符串。此外,将credt设置为OCI_CRED_EXT会忽略用户名和密码会话属性。
OCISessionBegin(OCISvctx*svchp,OCIError*errhp,OCISession*usrhp,ub4credt,ub4模式);
就是这样。我在代码中没有使用OCILogin或OCSessionPoolCreate。
祝你好运,David M.
- LibGit2 SSH身份验证失败
- 为什么 WinInet 在通过 FQDN 连接时无法通过协商自动进行身份验证,但如果通过 IP 连接则成功?
- 如何通过NetHTTPClient在HTTPS中进行身份验证
- 处理身份验证弹出窗口在wxWebView
- 如何测试我的谷歌身份验证器实现?
- 通过 Boost 和 C++ 进行 SMTP 身份验证
- libtorrent是否支持带摘要身份验证的http web种子
- 将Windows身份验证与cpprestsdk一起使用
- OCCI:使用SSL钱包身份验证连接到OracleDB
- 为什么我不能使用外围设备进行身份验证
- 无法使用C++代码向MongoDB进行身份验证
- 模拟的 HTTP 身份验证仅在本地主机上工作
- 使用OpenSSL的SHA 512 HMAC消息身份验证的问题
- Windows 套接字和身份验证构建在包含 Poco-Library 时失败
- 如何对进程进行身份验证
- 如何使用GSOAP初始化服务器上下文以启用简单身份验证(仅服务器身份验证)
- 解析 HTTP 的摘要式身份验证的正确正则表达式模式是什么?
- 在 SSH 上的公钥-私钥身份验证上的 libcurl 实现
- 使用 WinInet 的客户端身份验证(证书 + 私钥)
- 使用OCI的Oracle钱包身份验证