admin/sql/diagnose_data_perm_bad_guids.sql
2026-07-03 11:58:24 +08:00

63 lines
2.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 数据权限表:诊断 CHAR(36) 非法 GUID
-- 症状:GET /rbac/data-perm/template/list → Could not parse CHAR(36) value as Guid: 1
-- 或其它 data-perm 接口同类报错
--
-- ⚠️ 在 API 实际连接的 RBAC 库执行(与 user/role/menu 同库)
SET @GUID_RE = '^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$';
SELECT 'data_perm_template bad Id' AS section, t.`Id`, t.`Name`, t.`Code`, t.`CreateUserId`
FROM `data_perm_template` t
WHERE t.`Id` NOT REGEXP @GUID_RE;
SELECT 'data_perm_template_item bad Id/TemplateId' AS section, i.`Id`, i.`TemplateId`, i.`DimensionType`
FROM `data_perm_template_item` i
WHERE i.`Id` NOT REGEXP @GUID_RE
OR i.`TemplateId` NOT REGEXP @GUID_RE;
SELECT 'data_resource bad Id' AS section, r.`Id`, r.`Code`, r.`Name`
FROM `data_resource` r
WHERE r.`Id` NOT REGEXP @GUID_RE;
SELECT 'data_perm_field_mask bad Id' AS section, f.`Id`, f.`DataResourceCode`, f.`FieldName`
FROM `data_perm_field_mask` f
WHERE f.`Id` NOT REGEXP @GUID_RE;
SELECT 'user_org_perm bad Id/UserId/OrganizationId' AS section, p.`Id`, p.`UserId`, p.`OrganizationId`
FROM `user_org_perm` p
WHERE p.`Id` NOT REGEXP @GUID_RE
OR p.`UserId` NOT REGEXP @GUID_RE
OR p.`OrganizationId` NOT REGEXP @GUID_RE;
SELECT 'role_org_perm bad Id/RoleId/OrganizationId' AS section, p.`Id`, p.`RoleId`, p.`OrganizationId`
FROM `role_org_perm` p
WHERE p.`Id` NOT REGEXP @GUID_RE
OR p.`RoleId` NOT REGEXP @GUID_RE
OR p.`OrganizationId` NOT REGEXP @GUID_RE;
SELECT 'user_data_scope bad Id/UserId' AS section, p.`Id`, p.`UserId`, p.`DataResourceCode`
FROM `user_data_scope` p
WHERE p.`Id` NOT REGEXP @GUID_RE
OR p.`UserId` NOT REGEXP @GUID_RE;
SELECT 'role_data_scope bad Id/RoleId' AS section, p.`Id`, p.`RoleId`, p.`DataResourceCode`
FROM `role_data_scope` p
WHERE p.`Id` NOT REGEXP @GUID_RE
OR p.`RoleId` NOT REGEXP @GUID_RE;
SELECT 'data_perm_change_log bad TargetId' AS section, l.`Id`, l.`TargetType`, l.`TargetId`, l.`Action`
FROM `data_perm_change_log` l
WHERE l.`TargetId` NOT REGEXP @GUID_RE;
SELECT 'data_perm_access_log bad UserId' AS section, l.`Id`, l.`UserId`, l.`DataResourceCode`, l.`ApiPath`
FROM `data_perm_access_log` l
WHERE l.`UserId` NOT REGEXP @GUID_RE;
-- 常见脏值快捷统计
SELECT 'template Id=1' AS hint, COUNT(*) AS cnt FROM `data_perm_template` WHERE TRIM(`Id`) IN ('0', '1', '2');
SELECT 'template_item Id=1' AS hint, COUNT(*) AS cnt FROM `data_perm_template_item` WHERE TRIM(`Id`) IN ('0', '1', '2');
SELECT 'template dp prefix' AS hint, COUNT(*) AS cnt FROM `data_perm_template` WHERE `Id` LIKE 'dp%';
SELECT 'template dr prefix' AS hint, COUNT(*) AS cnt FROM `data_perm_template` WHERE `Id` LIKE 'dr%';
SELECT 'data_resource dr000001 prefix' AS hint, COUNT(*) AS cnt FROM `data_resource` WHERE `Id` LIKE 'dr000001-%';
SELECT 'field_mask fm000001 prefix' AS hint, COUNT(*) AS cnt FROM `data_perm_field_mask` WHERE `Id` LIKE 'fm000001-%';