1.3 account_banned - 账号封禁表

账号封禁表存储了被封禁账号的信息,包括封禁时间、解封时间、封禁原因等。

表结构

字段名 类型 属性 描述
id int(10) unsigned 主键 账号ID,对应account表中的id字段
bandate int(10) unsigned 主键 封禁日期 (Unix时间戳)
unbandate int(10) unsigned 不为空 解封日期 (Unix时间戳,0表示永久封禁)
bannedby varchar(50) 不为空 封禁操作者
banreason varchar(255) 不为空 封禁原因
active tinyint(3) unsigned 不为空 是否生效 (0=已解封, 1=封禁中)

字段详解

id

被封禁的账号ID,对应account表中的id字段。这个字段是表的主键之一,用于标识被封禁的账号。

示例值: 1, 42, 1337

bandate

账号被封禁的日期和时间,以Unix时间戳格式存储(从1970年1月1日UTC开始的秒数)。这个字段是表的主键之一,允许记录同一账号的多次封禁历史。

示例值: 1609459200(2021年1月1日 00:00:00 UTC)

注意: 可以使用FROM_UNIXTIME()函数将时间戳转换为可读的日期时间格式。

unbandate

账号预计解封的日期和时间,以Unix时间戳格式存储。如果设置为0,表示永久封禁。

示例值:

bannedby

执行封禁操作的管理员或系统名称。通常是GM的角色名或账号名,也可以是自动封禁系统的标识。

示例值: "Admin", "GameMaster", "AnticheatSystem"

banreason

封禁账号的原因,用于记录为什么对该账号执行封禁操作。这个信息通常会显示给被封禁的玩家。

示例值: "使用外挂", "违反服务条款", "骚扰其他玩家", "账号被盗"

active

表示封禁是否仍然生效。值为1表示封禁中,值为0表示已解封(可能是手动解封或封禁期已过)。

示例值: 0(已解封), 1(封禁中)

注意: 即使unbandate已过,如果active仍为1,账号仍然会被视为封禁状态。

使用示例

封禁账号

以下SQL语句将封禁ID为42的账号,为期30天:

INSERT INTO account_banned (id, bandate, unbandate, bannedby, banreason, active)
VALUES (42, UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + (30 * 24 * 3600), 'Admin', '使用外挂', 1);

永久封禁账号

以下SQL语句将永久封禁ID为42的账号:

INSERT INTO account_banned (id, bandate, unbandate, bannedby, banreason, active)
VALUES (42, UNIX_TIMESTAMP(), 0, 'Admin', '严重违规', 1);

解封账号

以下SQL语句将解封ID为42的账号:

UPDATE account_banned
SET active = 0
WHERE id = 42 AND active = 1;

相关表

常见问题

如何查看当前所有被封禁的账号?

使用以下SQL语句查询:

SELECT a.username, ab.bandate, ab.unbandate, ab.bannedby, ab.banreason
FROM account_banned ab
JOIN account a ON ab.id = a.id
WHERE ab.active = 1;

如何查看某个账号的封禁历史?

使用以下SQL语句查询:

SELECT FROM_UNIXTIME(bandate) AS ban_date,
       FROM_UNIXTIME(unbandate) AS unban_date,
       bannedby, banreason, active
FROM account_banned
WHERE id = 42
ORDER BY bandate DESC;

封禁账号后需要重启服务器吗?

不需要。封禁设置后立即生效,如果玩家当前已登录,他们将在下次尝试登录时被阻止。

如何区分临时封禁和永久封禁?

通过unbandate字段区分: