使用 MySQL 数据库设置 Keycloak
Keycloak setup with a MySQL database
所以,我在这里按照本教程使用 MySQL 数据库设置 keycloak,老实说,我根本无法取得任何进展!已经两天了,我完全卡住了。
我正在按照本指南进行操作,并且我已完全按照指南中的步骤进行操作:
创建docker网络:
docker network create keycloak-network
在此网络中启动 mysql
:
docker run --name mysql -d --net keycloak-network -e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=password -e MYSQL_ROOT_PASSWORD=root-password mysql
启动keycloak
:
docker run -p 8080:8080 --name keycloak --net keycloak-network -e KEYCLOAK_LOGLEVEL=DEBUG -e KEYCLOAK_USER=kc-admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak
此外,在 mysql 上我有 运行 以下命令:
CREATE SCHEMA keycloak;
CREATE USER 'keycloak'@'localhost' IDENTIFIED BY 'keyCloak@Idp123';
GRANT ALL PRIVILEGES ON *.* TO 'keycloak'@'localhost';
FLUSH PRIVILEGES;
和 SHOW GRANTS FOR 'keycloak'@'localhost'
给出了这个输出:
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `keycloak`@`localhost` |
| GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO `keycloak`@`localhost` |
然而,当 keycloak 容器启动时,我在日志中看到了这个:
Caused by: java.sql.SQLException: Access denied for user 'keycloak'@'172.18.0.3' (using password: YES)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
所以我想好吧,也许 IP 地址是一个因素,所以我 运行 SQL 再次命令 'keycloak'@'172.18.0.3'
,但这个问题仍然存在!我还能如何让我的 keycloak 连接到 MySQL 数据库?
您应该不需要手动定义用户。您需要为 db 和 keycloak 之间的连接指定更多环境,例如 DB_VENDOR。一个例子:https://github.com/keycloak/keycloak-containers/blob/master/docker-compose-examples/keycloak-mysql.yml
对于MYSQL;
MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE、MYSQL_ROOT_PASSWORD
对于钥匙斗篷;
DB_VENDOR、DB_ADDR、DB_PORT、DB_USER、DB_PASSWORD、DB_DATABASE、DB_SCHEMA、KEYCLOAK_USER, KEYCLOAK_PASSWORD
所以,我在这里按照本教程使用 MySQL 数据库设置 keycloak,老实说,我根本无法取得任何进展!已经两天了,我完全卡住了。
我正在按照本指南进行操作,并且我已完全按照指南中的步骤进行操作:
创建docker网络:
docker network create keycloak-network
在此网络中启动 mysql
:
docker run --name mysql -d --net keycloak-network -e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=password -e MYSQL_ROOT_PASSWORD=root-password mysql
启动keycloak
:
docker run -p 8080:8080 --name keycloak --net keycloak-network -e KEYCLOAK_LOGLEVEL=DEBUG -e KEYCLOAK_USER=kc-admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak
此外,在 mysql 上我有 运行 以下命令:
CREATE SCHEMA keycloak;
CREATE USER 'keycloak'@'localhost' IDENTIFIED BY 'keyCloak@Idp123';
GRANT ALL PRIVILEGES ON *.* TO 'keycloak'@'localhost';
FLUSH PRIVILEGES;
和 SHOW GRANTS FOR 'keycloak'@'localhost'
给出了这个输出:
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON *.* TO `keycloak`@`localhost` |
| GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,XA_RECOVER_ADMIN ON *.* TO `keycloak`@`localhost` |
然而,当 keycloak 容器启动时,我在日志中看到了这个:
Caused by: java.sql.SQLException: Access denied for user 'keycloak'@'172.18.0.3' (using password: YES)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)
at com.mysql.jdbc@8.0.22//com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)
所以我想好吧,也许 IP 地址是一个因素,所以我 运行 SQL 再次命令 'keycloak'@'172.18.0.3'
,但这个问题仍然存在!我还能如何让我的 keycloak 连接到 MySQL 数据库?
您应该不需要手动定义用户。您需要为 db 和 keycloak 之间的连接指定更多环境,例如 DB_VENDOR。一个例子:https://github.com/keycloak/keycloak-containers/blob/master/docker-compose-examples/keycloak-mysql.yml
对于MYSQL;
MYSQL_USER、MYSQL_PASSWORD、MYSQL_DATABASE、MYSQL_ROOT_PASSWORD
对于钥匙斗篷;
DB_VENDOR、DB_ADDR、DB_PORT、DB_USER、DB_PASSWORD、DB_DATABASE、DB_SCHEMA、KEYCLOAK_USER, KEYCLOAK_PASSWORD