使用SSH连接与PHP连接Oracle

使用SSH连接与PHP连接Oracle,php,database,oracle,ssh,oracle12c,Php,Database,Oracle,Ssh,Oracle12c,我有一个客户机要求来保护我们与Oracle数据库的应用程序连接。目前,我们正在使用OCI8 PHP库(oci_connect)使用配置文件(一种纯文本)中的凭据连接到Oracle,我们在其中维护所有凭据 现在,他们希望通过使用SSH实现某种安全连接来提高安全性,这样从应用程序到数据库的通信将是安全的。我在网上看到这是可能的 我的问题是,即使我们的管理员在应用服务器和DB服务器之间实现基于SSH的身份验证,我也不知道如何使用PHP OCI库实现这一点,因为OCI库使用用户名和密码连接DB服务器 我

我有一个客户机要求来保护我们与Oracle数据库的应用程序连接。目前,我们正在使用OCI8 PHP库(oci_connect)使用配置文件(一种纯文本)中的凭据连接到Oracle,我们在其中维护所有凭据

现在,他们希望通过使用SSH实现某种安全连接来提高安全性,这样从应用程序到数据库的通信将是安全的。我在网上看到这是可能的

我的问题是,即使我们的管理员在应用服务器和DB服务器之间实现基于SSH的身份验证,我也不知道如何使用PHP OCI库实现这一点,因为OCI库使用用户名和密码连接DB服务器

我试图了解是否有任何方法可以实现从PHP到Oracle的这种类型的身份验证连接


我正在使用Oracle 12c Enterprise edition。

回答第二部分-使用SSH建立安全连接。我们可以尝试使用Oracle钱包。因此,我们不需要在应用服务器中保存任何纯文本密码

尝试使用以下步骤使用Oracle钱包从PHP连接到Oracle DB

1-创建钱包()

2-使用PHP将Oracle即时客户端和钱包文件放在服务器上的某个位置(例如/opt/instantclient和/opt/wallet)

3-使用以下变量启动Apache:

ORACLE_HOME=/opt/instantclient   
LD_LIBRARY_PATH=/opt/instantclient   
TNS_ADMIN=/opt/wallet  
4-在/opt/wallet中创建包含以下内容的tnsnames.ora文件:

WALLET_NAME =  
  (DESCRIPTION =  
    (ADDRESS = (PROTOCOL = TCP)(HOST = DB_IP)(PORT = DB_PORT))    
    (CONNECT_DATA = (SID = DB_SID))    
  )   
WALLET_LOCATION =    
   (SOURCE =     
     (METHOD = FILE)     
     (METHOD_DATA =     
       (DIRECTORY = /opt/wallet)     
     )      
    )     

SQLNET.WALLET_OVERRIDE = TRUE  
其中WALLET_NAME是创建钱包时选择的钱包名称,DB_IP是数据库IP地址或主机名,DB_PORT是DB PORT,DB_SID是数据库的SID

5-在/opt/wallet中创建包含以下内容的sqlnet.ora文件:

WALLET_NAME =  
  (DESCRIPTION =  
    (ADDRESS = (PROTOCOL = TCP)(HOST = DB_IP)(PORT = DB_PORT))    
    (CONNECT_DATA = (SID = DB_SID))    
  )   
WALLET_LOCATION =    
   (SOURCE =     
     (METHOD = FILE)     
     (METHOD_DATA =     
       (DIRECTORY = /opt/wallet)     
     )      
    )     

SQLNET.WALLET_OVERRIDE = TRUE  
6-重新启动Apache

在PHP代码端,现在可以连接到数据库,并使用以下代码打开连接:

$conn = oci_connect("/", "", "WALLET_NAME", null, OCI_CRED_EXT);

OCI_CRED_EXT这告诉Oracle使用外部或操作系统身份验证,必须在数据库中进行配置。OCI_CRED_EXT标志只能与用户名“/”和空密码一起使用。

回答第二部分-使用SSH建立安全连接。我们可以尝试使用Oracle钱包。因此,我们不需要在应用服务器中保存任何纯文本密码

尝试使用以下步骤使用Oracle钱包从PHP连接到Oracle DB

1-创建钱包()

2-使用PHP将Oracle即时客户端和钱包文件放在服务器上的某个位置(例如/opt/instantclient和/opt/wallet)

3-使用以下变量启动Apache:

ORACLE_HOME=/opt/instantclient   
LD_LIBRARY_PATH=/opt/instantclient   
TNS_ADMIN=/opt/wallet  
4-在/opt/wallet中创建包含以下内容的tnsnames.ora文件:

WALLET_NAME =  
  (DESCRIPTION =  
    (ADDRESS = (PROTOCOL = TCP)(HOST = DB_IP)(PORT = DB_PORT))    
    (CONNECT_DATA = (SID = DB_SID))    
  )   
WALLET_LOCATION =    
   (SOURCE =     
     (METHOD = FILE)     
     (METHOD_DATA =     
       (DIRECTORY = /opt/wallet)     
     )      
    )     

SQLNET.WALLET_OVERRIDE = TRUE  
其中WALLET_NAME是创建钱包时选择的钱包名称,DB_IP是数据库IP地址或主机名,DB_PORT是DB PORT,DB_SID是数据库的SID

5-在/opt/wallet中创建包含以下内容的sqlnet.ora文件:

WALLET_NAME =  
  (DESCRIPTION =  
    (ADDRESS = (PROTOCOL = TCP)(HOST = DB_IP)(PORT = DB_PORT))    
    (CONNECT_DATA = (SID = DB_SID))    
  )   
WALLET_LOCATION =    
   (SOURCE =     
     (METHOD = FILE)     
     (METHOD_DATA =     
       (DIRECTORY = /opt/wallet)     
     )      
    )     

SQLNET.WALLET_OVERRIDE = TRUE  
6-重新启动Apache

在PHP代码端,现在可以连接到数据库,并使用以下代码打开连接:

$conn = oci_connect("/", "", "WALLET_NAME", null, OCI_CRED_EXT);

OCI_CRED_EXT这告诉Oracle使用外部或操作系统身份验证,必须在数据库中进行配置。OCI_CRED_EXT标志只能与用户名“/”和空密码一起使用。

似乎有人投票关闭了此问题。有问题吗?加密在Oracle网络层中配置。最简单的配置是Oracle的本机加密。我知道有一个例子(所有基于OCI的DB驱动程序都允许相同的配置:python、php、node.js等)。SSL更为复杂:查看Oracle手册以了解您的Oracle版本。似乎有人投票决定结束此问题。有问题吗?加密在Oracle网络层中配置。最简单的配置是Oracle的本机加密。我知道有一个例子(所有基于OCI的DB驱动程序都允许相同的配置:python、php、node.js等)。SSL更为复杂:查看Oracle手册,了解您的Oracle版本。信息不错,但与网络加密问题无关。我刚才解释了如何使用SSH,以便使用Oracle钱包以安全的方式从应用程序到数据库进行通信。所以不需要在服务器中保存纯文本密码。我更新了我回答的第一段,以澄清这一点。这将如何。helpNice信息,但与网络加密问题无关。我正在解释如何使用SSH,以便使用oracle钱包以安全的方式从应用程序到数据库进行通信。所以不需要在服务器中保存纯文本密码。我更新了我回答的第一段,以澄清这一点。这会怎么样,救命