You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现跨IP访问本地SQL数据库及游戏账号验证方案咨询

实现跨IP访问的游戏用户账号密码校验方案

1. 搭建本地SQL数据库(以MySQL为例)

创建存储用户的库与表

首先创建专门的认证数据库和用户表,绝对禁止明文存储密码,必须用哈希值存储:

CREATE DATABASE game_user_auth;
USE game_user_auth;

CREATE TABLE user_accounts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(64) UNIQUE NOT NULL COMMENT '用户名',
    pwd_hash VARCHAR(256) NOT NULL COMMENT '密码SHA256哈希值',
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

插入测试用户(示例密码为game1234):

INSERT INTO user_accounts (username, pwd_hash) VALUES ('player001', SHA2('game1234', 256));

2. 配置数据库允许跨IP访问

默认本地数据库仅允许localhost访问,需修改权限和配置:

授权跨IP用户

创建允许外部IP访问的数据库账号(测试阶段可放开所有IP,生产环境必须指定具体IP段):

CREATE USER 'game_auth_user'@'%' IDENTIFIED BY 'your_db_passwd';
GRANT SELECT ON game_user_auth.user_accounts TO 'game_auth_user'@'%';
FLUSH PRIVILEGES;

修改数据库绑定地址

找到MySQL配置文件(Linux为/etc/my.cnf,Windows为my.ini),修改绑定地址:

bind-address = 0.0.0.0  # 允许所有IP访问

重启MySQL服务生效:

# Linux
sudo systemctl restart mysql
# Windows
net stop mysql && net start mysql

同时要开放本地机器防火墙的3306端口,允许外部IP访问。

3. 实现账号密码校验逻辑(以Python后端为例)

编写后端服务接收客户端的账号密码,远程连接数据库完成校验:

import mysql.connector
from mysql.connector import Error

def check_user_credential(username, input_pwd):
    db_conn = None
    try:
        # 替换为你的数据库所在机器的IP
        db_conn = mysql.connector.connect(
            host='192.168.3.10',
            database='game_user_auth',
            user='game_auth_user',
            password='your_db_passwd'
        )
        if not db_conn.is_connected():
            return {"code": 500, "msg": "数据库连接失败"}
        
        cursor = db_conn.cursor()
        # 查询对应用户的密码哈希
        query = "SELECT pwd_hash FROM user_accounts WHERE username = %s"
        cursor.execute(query, (username,))
        result = cursor.fetchone()
        
        if not result:
            return {"code": 404, "msg": "用户不存在"}
        
        stored_hash = result[0]
        # 计算输入密码的哈希并对比
        input_hash = mysql.connector.hash(input_pwd, 'sha256')
        if input_hash == stored_hash:
            return {"code": 200, "msg": "验证通过"}
        else:
            return {"code": 401, "msg": "密码错误"}
            
    except Error as e:
        return {"code": 500, "msg": f"数据库错误: {str(e)}"}
    finally:
        if db_conn and db_conn.is_connected():
            cursor.close()
            db_conn.close()

# 测试调用
print(check_user_credential('player001', 'game1234'))

4. 客户端对接逻辑

游戏客户端(如Unity、UE)通过HTTP请求调用上述后端接口,传递用户名和密码,根据返回的code和msg处理验证结果。禁止客户端直接连接数据库,避免泄露数据库账号密码。

关键注意事项

  • 生产环境必须用HTTPS传输账号密码,防止明文泄露
  • 密码哈希推荐使用更安全的bcrypt算法,而非SHA256
  • 数据库账号仅授予SELECT权限,避免被恶意操作

内容的提问来源于stack exchange,提问作者Lenin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:30:46