2026-04-16 11:30:30 +08:00
|
|
|
|
DROP SCHEMA IF EXISTS auth CASCADE;
|
|
|
|
|
|
CREATE SCHEMA IF NOT EXISTS auth;
|
|
|
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS auth.tb_auth_refresh_token CASCADE;
|
2026-04-14 16:27:47 +08:00
|
|
|
|
CREATE TABLE IF NOT EXISTS auth.tb_auth_refresh_token (
|
|
|
|
|
|
token_id VARCHAR(64) PRIMARY KEY,
|
2026-04-17 16:31:32 +08:00
|
|
|
|
session_id VARCHAR(64) NOT NULL,
|
|
|
|
|
|
client_type VARCHAR(32) NOT NULL DEFAULT 'WEB',
|
2026-04-14 16:27:47 +08:00
|
|
|
|
user_id VARCHAR(64) NOT NULL,
|
|
|
|
|
|
username VARCHAR(64) NOT NULL,
|
2026-04-14 18:14:41 +08:00
|
|
|
|
adcode VARCHAR(12),
|
2026-04-14 16:27:47 +08:00
|
|
|
|
tenant_id VARCHAR(64),
|
|
|
|
|
|
tenant_path VARCHAR(255),
|
|
|
|
|
|
dept_id VARCHAR(64),
|
|
|
|
|
|
dept_path VARCHAR(255),
|
|
|
|
|
|
refresh_token TEXT NOT NULL,
|
|
|
|
|
|
expire_at TIMESTAMP NOT NULL,
|
|
|
|
|
|
revoked BOOLEAN NOT NULL DEFAULT FALSE,
|
2026-04-17 16:31:32 +08:00
|
|
|
|
revoked_at TIMESTAMP,
|
|
|
|
|
|
last_active_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
2026-04-14 16:27:47 +08:00
|
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
|
|
|
|
);
|
2026-04-14 18:14:41 +08:00
|
|
|
|
COMMENT ON TABLE auth.tb_auth_refresh_token IS '认证刷新令牌表';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.token_id IS '令牌ID';
|
2026-04-17 16:31:32 +08:00
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.session_id IS '会话ID';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.client_type IS '客户端类型(WEB/MINI)';
|
2026-04-14 18:14:41 +08:00
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.user_id IS '用户ID';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.username IS '用户名';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.adcode IS '行政区划编码';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.tenant_id IS '租户ID';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.tenant_path IS '租户路径';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.dept_id IS '部门ID';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.dept_path IS '部门路径';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.refresh_token IS '刷新令牌';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.expire_at IS '过期时间';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.revoked IS '是否撤销';
|
2026-04-17 16:31:32 +08:00
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.revoked_at IS '撤销时间';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.last_active_at IS '最后活跃时间';
|
2026-04-14 18:14:41 +08:00
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.created_at IS '创建时间';
|
2026-04-14 16:27:47 +08:00
|
|
|
|
|
2026-04-16 11:30:30 +08:00
|
|
|
|
DROP TABLE IF EXISTS auth.tb_auth_login_audit CASCADE;
|
2026-04-14 16:27:47 +08:00
|
|
|
|
CREATE TABLE IF NOT EXISTS auth.tb_auth_login_audit (
|
|
|
|
|
|
audit_id VARCHAR(64) PRIMARY KEY,
|
|
|
|
|
|
user_id VARCHAR(64),
|
|
|
|
|
|
username VARCHAR(64) NOT NULL,
|
2026-04-17 16:31:32 +08:00
|
|
|
|
client_type VARCHAR(32) NOT NULL DEFAULT 'WEB',
|
2026-04-14 18:14:41 +08:00
|
|
|
|
adcode VARCHAR(12),
|
2026-04-14 16:27:47 +08:00
|
|
|
|
tenant_id VARCHAR(64),
|
|
|
|
|
|
tenant_path VARCHAR(255),
|
|
|
|
|
|
dept_id VARCHAR(64),
|
|
|
|
|
|
dept_path VARCHAR(255),
|
|
|
|
|
|
login_ip VARCHAR(64),
|
|
|
|
|
|
login_status VARCHAR(32) NOT NULL,
|
2026-04-17 16:31:32 +08:00
|
|
|
|
failure_reason VARCHAR(255),
|
2026-04-14 16:27:47 +08:00
|
|
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
|
|
|
|
);
|
2026-04-14 18:14:41 +08:00
|
|
|
|
COMMENT ON TABLE auth.tb_auth_login_audit IS '登录审计日志表';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.audit_id IS '审计ID';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.user_id IS '用户ID';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.username IS '用户名';
|
2026-04-17 16:31:32 +08:00
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.client_type IS '客户端类型';
|
2026-04-14 18:14:41 +08:00
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.adcode IS '行政区划编码';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.tenant_id IS '租户ID';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.tenant_path IS '租户路径';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.dept_id IS '部门ID';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.dept_path IS '部门路径';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.login_ip IS '登录IP';
|
|
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.login_status IS '登录状态';
|
2026-04-17 16:31:32 +08:00
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.failure_reason IS '失败原因';
|
2026-04-14 18:14:41 +08:00
|
|
|
|
COMMENT ON COLUMN auth.tb_auth_login_audit.created_at IS '创建时间';
|
2026-04-14 16:27:47 +08:00
|
|
|
|
|
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_auth_refresh_token_user ON auth.tb_auth_refresh_token(user_id);
|
2026-04-17 16:31:32 +08:00
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_auth_refresh_token_user_client ON auth.tb_auth_refresh_token(user_id, client_type, session_id);
|
|
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_auth_refresh_token_value ON auth.tb_auth_refresh_token(refresh_token);
|
2026-04-14 16:27:47 +08:00
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_auth_login_audit_tenant ON auth.tb_auth_login_audit(tenant_id, created_at DESC);
|