oracle / python-oracledb

Python driver for Oracle Database conforming to the Python DB API 2.0 specification. This is the renamed, new major release of cx_Oracle
https://oracle.github.io/python-oracledb
Other
325 stars 64 forks source link

Using create_pool() with Kerberos #381

Open CEBasile opened 4 weeks ago

CEBasile commented 4 weeks ago
  1. What versions are you using? oracledb.version: 2.2.1 platform.platform: Windows-2016Server-10.0.14393-SP0 sys.maxsize > 2**32: True platform.python_version: 3.12.4 database version: 19.22.0.0
  1. Is it an error or a hang or a crash? Error, same as issue #36 but for Kerberos this time

  2. What error(s) or behavior you are seeing? When trying to create a connection pool with externalauth=True (Kerberos in this case) there is an exception complaining about null or missing username. File "src\oracledb\impl/thick/pool.pyx", line 152, in oracledb.thick_impl.ThickPoolImpl.init File "src\oracledb\impl/thick/utils.pyx", line 446, in oracledb.thick_impl._raise_from_info oracledb.exceptions.DatabaseError: ORA-24415: Missing or null username.

    1. Include a runnable Python script that shows the problem.
anthony-tuininga commented 4 weeks ago

Did you create the pool in heterogeneous mode? That is mandatory for external authentication in thick mode.

CEBasile commented 3 weeks ago

Thank you Anthony, this is the correct answer and does work. I ready through the documentation and it led me to understand that since all the connections in the pool are still using the same credentials I should be using homogenous mode. Maybe I misunderstood, or the documentation needs to be improved?

anthony-tuininga commented 3 weeks ago

Logically it makes sense that since you intend to use the same credentials for all connections in the pool that homogeneous mode is supported -- but that is not, in fact, the case. Which documentation were you looking at? We can definitely look at that documentation and see if there is a way to improve it so there isn't confusion for the next person looking at it!

CEBasile commented 3 weeks ago

Just kind of a combination of these: https://python-oracledb.readthedocs.io/en/latest/user_guide/connection_handling.html#extauth https://python-oracledb.readthedocs.io/en/latest/api_manual/connection_pool.html#connectionpool-methods https://python-oracledb.readthedocs.io/en/latest/api_manual/module.html#oracledb.create_pool

There's no explicit mention of the behavior with Kerberos so it was mostly an educated guess on my part.

anthony-tuininga commented 3 weeks ago

Yep. I can see how you would be confused and I'll look into getting this improved. The different external authentication methods are not mentioned explicitly but anything not requiring a user name and password fits in that category and the number of options continues to grow -- so not sure mentioning Kerberos explicitly is helpful. I'll see what @cjbj thinks!

anthony-tuininga commented 3 weeks ago

Another option is to raise a more meaningful error when this situation is detected (externalauth=True and homogeneous=True)? Something like this?

DPY-XXXX: homogeneous pools are not supported with external authentication in thick mode