WSO2 IS - 从 IS 中删除用户时出现 POST_DELETE_USER 错误
WSO2 IS - POST_DELETE_USER error while deleting user from IS
我们已经安装了 WSO2AM 2.6.0,IS 作为 KM (5.7)。我们在一个实例中将 AM 部署为主动-主动,并将 IS 部署为 KM 主动-主动,遵循官方文档中编写的所有指令。
根据文档,我们创建了以下数据库及其各自的数据源:regdb(注册表)、carbondb、userdb(用户存储)、mb-store、apimdb。
我们现在遇到的问题是在IS方面。我们尝试了几件事来检查一切是否正常工作,比如创建用户、检查注册表访问等。我们创建了一个名为 "test" 的用户,更改了一些属性等,然后我们继续删除该用户。
当我们删除用户时,我们会在 IS 控制台上看到以下弹出窗口:
检查日志我们发现以下内容:
Caused by: org.postgresql.util.PSQLException: ERROR: relation "cm_receipt" does not exist
Position: 135
TID: [-1234] [] [2020-05-11 09:00:30,062] ERROR {org.wso2.carbon.user.mgt.ui.UserAdminClient} - Error when handling event : POST_DELETE_USER
org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException: UserAdminUserAdminException
我们检查了数据库,用户被正确删除,IS carbon 控制台不再显示它,所以用户被正确删除。再检查一点,删除用户进程正在尝试访问 carbondb 上的 table "cm_receipt",但是 table 存在于 apimdb.
在 postgres 端,我们在删除期间有此日志:
<2020-05-08 11:49:50.452 -03:172.19.35.21(45740):wso2carbon@carbondb:[12476]:>ERROR: relation "cm_receipt" does not exist at character 135
<2020-05-08 11:49:50.452 -03:172.19.35.21(45740):wso2carbon@carbondb:[12476]:>STATEMENT: SELECT R.CONSENT_RECEIPT_ID, R.LANGUAGE, R.PII_PRINCIPAL_ID, R.PRINCIPAL_TENANT_ID, R.STATE,RS.SP_DISPLAY_NAME,RS.SP_DESCRIPTION FROM CM_RECEIPT R INNER JOIN CM_RECEIPT_SP_ASSOC RS ON R.CONSENT_RECEIPT_ID=RS.CONSENT_RECEIPT_ID WHERE PII_PRINCIPAL_ID LIKE AND PRINCIPAL_TENANT_ID = AND SP_NAME LIKE AND STATE LIKE ORDER BY ID ASC LIMIT OFFSET
您知道为什么会发生这种情况吗?有一些相关的错误吗?
谢谢!
这可能有两个原因。
- 您忘记执行包含 同意管理 表的 D 脚本。
/wso2is-5.7.0/dbscripts/consent/postgresql.sql
.
- 您的
wso2is-5.7.0/repository/conf/consent-mgt-config.xml
配置文件引用了错误的数据源。
解决方案
检查 consent-mgt-config.xml
文件引用的数据源是什么。默认情况下是这样的。
<ConsentManager xmlns="http://wso2.org/carbon/consent/management" xmlns:svns="http://org.wso2.securevault/configuration">
<DataSource>
<!-- Include a data source name (jndiConfigName) from the set of data sources defined in master-datasources
.xml -->
<Name>jdbc/WSO2IdentityDB</Name>
</DataSource>
这里是jdbc/WSO2IdentityDB。然后转到您的 wso2is-5.7.0/repository/conf/datasources/master-datasource.xml
文件并检查该数据源的数据库。如果上述表未在该数据库中创建,您可以在该数据库中执行上述 postgre.sql 脚本。 (如果您已经在不同的数据源中创建了这些表,您可能想要更改 consent-mgt-config.xml
文件中定义的数据源。)
P.S。切勿在启动时使用 -Dsetup
参数自动执行数据库脚本。始终针对数据库手动执行数据库脚本。
P.S。用户删除成功的原因是此用户同意删除过程是一个 POST_USER_DELETION 事件。 POST 处理程序中的失败不会影响操作本身。
我们已经安装了 WSO2AM 2.6.0,IS 作为 KM (5.7)。我们在一个实例中将 AM 部署为主动-主动,并将 IS 部署为 KM 主动-主动,遵循官方文档中编写的所有指令。 根据文档,我们创建了以下数据库及其各自的数据源:regdb(注册表)、carbondb、userdb(用户存储)、mb-store、apimdb。
我们现在遇到的问题是在IS方面。我们尝试了几件事来检查一切是否正常工作,比如创建用户、检查注册表访问等。我们创建了一个名为 "test" 的用户,更改了一些属性等,然后我们继续删除该用户。 当我们删除用户时,我们会在 IS 控制台上看到以下弹出窗口:
检查日志我们发现以下内容:
Caused by: org.postgresql.util.PSQLException: ERROR: relation "cm_receipt" does not exist
Position: 135
TID: [-1234] [] [2020-05-11 09:00:30,062] ERROR {org.wso2.carbon.user.mgt.ui.UserAdminClient} - Error when handling event : POST_DELETE_USER
org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException: UserAdminUserAdminException
我们检查了数据库,用户被正确删除,IS carbon 控制台不再显示它,所以用户被正确删除。再检查一点,删除用户进程正在尝试访问 carbondb 上的 table "cm_receipt",但是 table 存在于 apimdb.
在 postgres 端,我们在删除期间有此日志:
<2020-05-08 11:49:50.452 -03:172.19.35.21(45740):wso2carbon@carbondb:[12476]:>ERROR: relation "cm_receipt" does not exist at character 135
<2020-05-08 11:49:50.452 -03:172.19.35.21(45740):wso2carbon@carbondb:[12476]:>STATEMENT: SELECT R.CONSENT_RECEIPT_ID, R.LANGUAGE, R.PII_PRINCIPAL_ID, R.PRINCIPAL_TENANT_ID, R.STATE,RS.SP_DISPLAY_NAME,RS.SP_DESCRIPTION FROM CM_RECEIPT R INNER JOIN CM_RECEIPT_SP_ASSOC RS ON R.CONSENT_RECEIPT_ID=RS.CONSENT_RECEIPT_ID WHERE PII_PRINCIPAL_ID LIKE AND PRINCIPAL_TENANT_ID = AND SP_NAME LIKE AND STATE LIKE ORDER BY ID ASC LIMIT OFFSET
您知道为什么会发生这种情况吗?有一些相关的错误吗?
谢谢!
这可能有两个原因。
- 您忘记执行包含 同意管理 表的 D 脚本。
/wso2is-5.7.0/dbscripts/consent/postgresql.sql
. - 您的
wso2is-5.7.0/repository/conf/consent-mgt-config.xml
配置文件引用了错误的数据源。
解决方案
检查 consent-mgt-config.xml
文件引用的数据源是什么。默认情况下是这样的。
<ConsentManager xmlns="http://wso2.org/carbon/consent/management" xmlns:svns="http://org.wso2.securevault/configuration">
<DataSource>
<!-- Include a data source name (jndiConfigName) from the set of data sources defined in master-datasources
.xml -->
<Name>jdbc/WSO2IdentityDB</Name>
</DataSource>
这里是jdbc/WSO2IdentityDB。然后转到您的 wso2is-5.7.0/repository/conf/datasources/master-datasource.xml
文件并检查该数据源的数据库。如果上述表未在该数据库中创建,您可以在该数据库中执行上述 postgre.sql 脚本。 (如果您已经在不同的数据源中创建了这些表,您可能想要更改 consent-mgt-config.xml
文件中定义的数据源。)
P.S。切勿在启动时使用 -Dsetup
参数自动执行数据库脚本。始终针对数据库手动执行数据库脚本。
P.S。用户删除成功的原因是此用户同意删除过程是一个 POST_USER_DELETION 事件。 POST 处理程序中的失败不会影响操作本身。