3

私はグーグルをしましたが、私は実質的な結果を見いだせませんでした。キーベースの認証を使用して、Pythonを使用してOracleサーバーに接続することは可能ですか?私の目的は、サーバーのどこにでもユーザー名/パスワードを保存する必要なく、私がPythonでやっているいくつかのレポートを自動化できるようにすることです。公開鍵での認証とPythonを使用したcx_Oracle

+0

これは役立つかもしれませんが、Oracle Walletを使用してください。http://www.dbaportal.eu/?q=node/126 –

答えて

4

1つの解決策は、Oracle Walletを実装することです。 Oracleのウォレットエントリの作成持つ含まれます

  • 言っインスタンス
  • ユーザ名とパスワードがために確立TNSNAME解像度名

例:私はORCLという名前で働いていたOracle SID、私が接続しなければならないユーザーはmy_userという名前になります。 tnsnames.oraファイルにはすでに、ORCLサービス名/ SIDを解決するエントリがまったく同じパラメータを持つ1以上を作成します。

#initial local name entry: 
ORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = my_ip)(PORT = 1528))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL))) 

#create an additional local name entry: 
ORCL_MY_USER = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = my_ip)(PORT = 1528))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL))) 

新しいエントリが正常に解決された後、のためのOracleウォレットのエントリを作成しますORCL_MY_USERローカル名。この新しいローカル名は、Pythonスクリプトでパスワードを入力したりハードコーディングすることなく接続するために使用します。

例:

インポートcx_Oracle

デシベル= cx_Oracle.connect( "/ @のORCL_MY_USER")

カーソル= db.cursor()

R = cursor.execute ( "ユーザー名、パスワード、 account_status、default_tablespace、temporary_tablespace からdba_usersのユーザー名順")

ユーザ名、パスワード、account_status、DEFAULT_TABLESPACEため

、カーソル内の temporary_tablespace:

print username, '\t', password, '\t', account_status, '\t', default_tablespace, '\t', temporary_tablespace 
+0

ありがとうございます。私は非常に似たようなソリューションを実装することになりました。 WalletユーザーのSIDを「通常の」SIDから分離することをお勧めします。 1つの質問ですが、sqlnet.oraにOracle Walletの場所を指定する必要はありませんか? – Nitzle

+0

しかし、誰もこのコードを使用してデータベースに接続することはできません。公開鍵/秘密鍵モデルを使用する場合のように、一部の人だけがそれを実行できるようにしたい場合はどうでしょうか。 – user2601010

1

はい、あなたはSQLNET.ORAにOracleウォレットの場所を指定する必要があります。

WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/product/11.2.0.2/dbhome_1/owm/wallets/oracle))) 
SQLNET.WALLET_OVERRIDE = TRUE 
SSL_CLIENT_AUTHENTICATION = FALSE 
SSL_VERSION = 0 

私の理解から、Oracleの財布のデフォルトの場所は$ ORACLE_HOME/OWM /財布/の下にあります。

関連する問題