使用数据库服务名称使用 keycloak 配置数据库

iuh*_*chi 5 database oracle11g docker keycloak docker-compose

keycloak我已经使用数据库和以下配置成功配置了数据库SID。但是,我必须配置另一个数据库,该数据库没有SID但有一个service name文件docker-compose。我找不到配置数据库以keycloak使用它的方法service name

在 docker-compose 文件中使用 SID 进行配置

         - name: DB_VENDOR
           value: ORACLE
         - name: DB_ADDR
           value: xxx.xx.xx.xxx
         - name: DB_PORT
           value: "1521"
         - name: DB_DATABASE
           value: sid_name
         - name: DB_USER
           value: db_user_name
         - name: DB_PASSWORD
           value: ******
Run Code Online (Sandbox Code Playgroud)

当我尝试使用service name而不是SID作为值时,DB_DATABASE它给出了以下错误。

Caused by: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
Run Code Online (Sandbox Code Playgroud)

感谢您为解决此问题提供的帮助。

先感谢您..

Yur*_*y P 4

看来Keycloak的docker容器不支持它。但您可以构建自定义 docker 映像来修复它。请看一下文件change-database.cli,有一行:

connection-url=jdbc:oracle:thin:@${env.DB_ADDR:oracle}:${env.DB_PORT:1521}:${env.DB_DATABASE:XE}${env.JDBC_PARAMS:}
Run Code Online (Sandbox Code Playgroud)

您需要像这样的行(端口后面的斜杠而不是冒号,这是 Oracle 服务名称正常工作所必需的):

connection-url=jdbc:oracle:thin:@${env.DB_ADDR:oracle}:${env.DB_PORT:1521}/${env.DB_DATABASE:XE}${env.JDBC_PARAMS:}
Run Code Online (Sandbox Code Playgroud)

因此,更改此文件并构建自定义 Keycloak docker 映像。Dockerfile 可能类似于:

FROM jboss/keycloak:8.0.1
ADD /<path_on_your_system>/change-database.cli /opt/jboss/tools/cli/databases/oracle/change-database.cli 
Run Code Online (Sandbox Code Playgroud)