6

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

4

2 に答える 2

6

考えられる解決策の1つは、OracleWalletを実装することです。Oracle Walletエントリの作成には、次のものが含まれます。

  • 上記のインスタンスに対して確立されたtnsname解決名
  • ユーザー名とパスワード

例:使用しているOracle sidの名前はORCLで、接続する必要のあるユーザーの名前は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)))

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

例:

cx_Oracleをインポートします

db = cx_Oracle.connect( "/@ ORCL_MY_USER")

カーソル=db.cursor()

r = cursor.execute( "SELECT username、password、account_status、default_tablespace、temporary_tablespace from dba_users order by username")

カーソル内のユーザー名、パスワード、account_status、default_tablespace、temporary_tablespaceの場合:

    print username, '\t', password, '\t', account_status, '\t', default_tablespace, '\t', temporary_tablespace
于 2012-05-31T17:49:57.310 に答える
2

はい、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 /wallets/の下にあります。

于 2012-06-01T15:25:44.630 に答える