2026-09-01 19:15:32 +08:00
|
|
|
-- Auth 单一登录标识增量:用户名或中国大陆手机号。
|
|
|
|
|
-- 可重复执行;手机号仅从 IAM 当前用户档案回填,无法确认的账号保持 NULL。
|
|
|
|
|
USE baiyue_auth;
|
|
|
|
|
|
|
|
|
|
DROP PROCEDURE IF EXISTS auth_add_login_phone;
|
|
|
|
|
DELIMITER $$
|
|
|
|
|
CREATE PROCEDURE auth_add_login_phone()
|
|
|
|
|
BEGIN
|
|
|
|
|
IF NOT EXISTS (
|
|
|
|
|
SELECT 1 FROM information_schema.columns
|
|
|
|
|
WHERE table_schema = 'baiyue_auth' AND table_name = 'auth_account' AND column_name = 'phone') THEN
|
|
|
|
|
ALTER TABLE auth_account ADD COLUMN phone VARCHAR(32) NULL COMMENT '全局唯一中国大陆登录手机号' AFTER username;
|
|
|
|
|
END IF;
|
|
|
|
|
END$$
|
|
|
|
|
DELIMITER ;
|
|
|
|
|
CALL auth_add_login_phone();
|
|
|
|
|
DROP PROCEDURE auth_add_login_phone;
|
|
|
|
|
|
|
|
|
|
DROP PROCEDURE IF EXISTS auth_backfill_login_phone;
|
|
|
|
|
DELIMITER $$
|
|
|
|
|
CREATE PROCEDURE auth_backfill_login_phone()
|
|
|
|
|
BEGIN
|
|
|
|
|
IF EXISTS (
|
|
|
|
|
SELECT user.phone
|
|
|
|
|
FROM baiyue_iam.iam_user user
|
2026-09-01 19:27:46 +08:00
|
|
|
WHERE user.deleted = 0 AND user.phone REGEXP '^1[3-9][0-9]{9}$'
|
2026-09-01 19:15:32 +08:00
|
|
|
GROUP BY user.phone HAVING COUNT(DISTINCT user.auth_user_id) > 1) THEN
|
|
|
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'IAM 存在重复手机号,禁止建立 Auth 唯一登录索引';
|
|
|
|
|
END IF;
|
|
|
|
|
UPDATE auth_account account
|
|
|
|
|
JOIN baiyue_iam.iam_user user ON user.auth_user_id = account.id AND user.deleted = 0
|
|
|
|
|
SET account.phone = user.phone
|
2026-09-01 19:27:46 +08:00
|
|
|
WHERE account.phone IS NULL AND user.phone REGEXP '^1[3-9][0-9]{9}$';
|
2026-09-01 19:15:32 +08:00
|
|
|
IF NOT EXISTS (
|
|
|
|
|
SELECT 1 FROM information_schema.statistics
|
|
|
|
|
WHERE table_schema = 'baiyue_auth' AND table_name = 'auth_account'
|
|
|
|
|
AND index_name = 'uk_auth_account_phone') THEN
|
|
|
|
|
ALTER TABLE auth_account ADD UNIQUE KEY uk_auth_account_phone (phone);
|
|
|
|
|
END IF;
|
|
|
|
|
END$$
|
|
|
|
|
DELIMITER ;
|
|
|
|
|
CALL auth_backfill_login_phone();
|
|
|
|
|
DROP PROCEDURE auth_backfill_login_phone;
|