我正在使用帶有 python 3.7 版本的 cx_oracle 模塊,我需要檢查連接是否加密。如果不是,我需要將 ssl 設定為 true 以使其加密。
這是我建立連接的一段代碼:
import cx_Oracle
dsn = cx_Oracle.makedsn(host='127.0.0.1', port=1521, sid='your_sid')
conn = cx_Oracle.connect(user='your_username', password='your_password', dsn=dsn)
conn.close()
uj5u.com熱心網友回復:
當您考慮為您的連接啟用安全性時,您的第一步應該是使用wallet,甚至在考慮使用之前ssl,并避免使用密碼。如果您的密碼在您的 Python 程式中可見,那么您的網路流量的加密程度并不重要。我知道這不是問題本身的一部分,但這是一個非常好的做法,可用于cx_Oracle.
一個示例(我的 Python 程式在 Linux 客戶端機器上運行,該機器也使用 連接到 Linux 中的 Oracle 資料庫ssl)
客戶端
1.創建錢包
mkstore -wrl "/home/myuser/wallet_directory" -create
2.創建憑證
mkstore -wrl "/home/myuser/wallet_directory" -createCredential mynetalias myuser myuserpw
我將存盤在我的檔案中的字串連接mynetalias的別名在哪里。在我的示例中,我將使用與創建錢包相同的目錄。tnstnsnames.ora
3.創建tnsnames.ora并添加錢包中使用的相同別名
mynetalias =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbhost.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclpdb1)
)
)
4.創建sqlnet.ora檔案
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /home/myuser/wallet_dir)
)
)
SQLNET.WALLET_OVERRIDE = TRUE
5.將您的TNS_ADMIN環境變數添加到您的 bash 組態檔中。
cd
echo "export TNS_ADMIN=/home/myuser/wallet_directory" >> .bashrc
如果您肯定知道資料庫服務器強制執行完整性和加密,那么您不需要在客戶端配置任何內容。但是,您也可以根據您的業務需要這樣做。將以下幾行添加到sqlnet.ora錢包所在的檔案中
SQLNET.CRYPTO_CHECKSUM_CLIENT = required
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA512)
SQLNET.ENCRYPTION_CLIENT = required
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256)
資料庫端
為了進行設定SSL,encryption我們需要將這些值添加到資料庫sqlnet.ora檔案中。查看您的要求并討論正確的安全演算法。在我的情況下,我的資料庫接受任何一種方式的連接(加密或不加密)。
SQLNET.CRYPTO_CHECKSUM_SERVER = accepted
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA512)
SQLNET.ENCRYPTION_SERVER = accepted
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
您可能想在此處查看這些引數:
SQLNET 引數
如何連接
普通的
connection = cx_Oracle.connect(dsn="mynetalias")
水池
pool = cx_Oracle.SessionPool(externalauth=True, homogeneous=False,
dsn="mynetalias")
pool.acquire()
請記住,dsn必須與tnsnames.ora之前配置中使用的別名完全匹配。
使用視圖提供的資訊V$SESSION_CONNECT_INFO來確保您的連接是加密的(欄位network_service_banner)
uj5u.com熱心網友回復:
執行此操作的最簡單方法是使用 Oracle 本機網路加密,如 cx_Oracle 手冊中所述:安全加密到 Oracle 資料庫的網路流量
哦,既然我們已經做到了這一點,請聰明點并連接到服務名稱而不是 sid。目前,許多資料庫作為可插拔資料庫運行,使用 sid 會將您帶入根容器,而不是應用程式所在的表。
為了使用 sqlnet.ora,請確保定義 TNS_ADMIN 環境變數,使其指向您放置 sqlnet.ora 檔案和可選的 tnsnames.ora 檔案的目錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/331642.html
標籤:Python 蟒蛇-3.x 甲骨文 ssl cx-oracle
下一篇:在類方法中指定型別
