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 

您知道为什么会发生这种情况吗?有一些相关的错误吗?

谢谢!

这可能有两个原因。

  1. 您忘记执行包含 同意管理 表的 D 脚本。 /wso2is-5.7.0/dbscripts/consent/postgresql.sql.
  2. 您的 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 处理程序中的失败不会影响操作本身。