设为首页收藏本站
  • 官方微信
    lmkj_wx 微信公众号 添加方式:
    1:扫描左侧二维码
  • 手机访问
    lmkj_sj
  •  找回密码
     立即注册

    QQ登录

    只需一步,快速开始

    查看: 24|回复: 0

    怎样合理分配数据库的权限

    [复制链接]
    avatar
    • 打卡等级:魔龙套勇士
    • 打卡总天数:130
    • 打卡月天数:23
    • 打卡总奖励:14868
    • 最近打卡:2025-08-23 00:38:01

    7084

    主题

    150

    回帖

    8650

    积分

    管理员

    本站站长

    积分
    8650
    online_admin 发表于 2025-7-6 17:57:21 | 显示全部楼层 |阅读模式
    在 GOM 引擎中,合理分配数据库权限需遵循 “最小权限原则”、“职责分离原则”、“动态权限原则”,并结合游戏运营的实际场景设计精细的权限体系。以下是具体的权限分配策略和实施步骤:
    一、基于角色的权限分离(RBAC 模型)
    将数据库操作角色划分为系统层、运营层、应用层,每层赋予不同的权限集:

    角色        权限范围        典型操作
    DBA(数据库管理员)        完全控制(CREATE/ALTER/DROP TABLE,BACKUP/RESTORE DATABASE)        创建表结构、修改字段类型、执行全量备份、恢复数据
    GM(游戏管理员)        玩家数据查询(SELECT)、有限修改(UPDATE 特定表)        查询玩家角色信息、重置玩家密码、发放活动奖励
    运维工程师        监控与优化(SHOW STATUS,OPTIMIZE TABLE)        查看数据库性能指标、优化查询语句、重启服务
    游戏服务器进程        特定表的增删改查(INSERT/UPDATE/DELETE/SELECT)        读写玩家角色数据、物品数据、任务进度
    第三方插件        只读(SELECT)或受限写(INSERT 特定表)        读取玩家数据生成统计报表、记录登录日志
    二、核心数据表的权限细化
    针对 GOM 引擎的关键数据表,按业务风险分级配置权限:
    1. 高风险表(玩家资产 / 核心配置)
    表名:Role(角色表)、Backpack(背包表)、Item(物品表)、GoldLog(金币流水)
    权限策略:
    DBA:完全控制
    GM:仅允许SELECT,需修改时通过存储过程(如sp_GiveItem)间接操作
    游戏进程:SELECT/UPDATE(仅限当前登录玩家的数据)
    禁止:第三方插件访问
    2. 中风险表(运营数据)
    表名:Activity(活动表)、Quest(任务表)、Rank(排行榜)
    权限策略:
    DBA:完全控制
    GM:SELECT/INSERT/UPDATE(活动配置)
    游戏进程:SELECT(读取活动规则)、INSERT(提交任务)
    第三方插件:SELECT(生成活动报表)
    3. 低风险表(日志 / 统计)
    表名:LoginLog(登录日志)、ChatLog(聊天日志)、Performance(性能监控)
    权限策略:
    DBA:完全控制
    GM:SELECT(查询可疑登录)
    运维:SELECT/DELETE(清理过期日志)
    第三方插件:SELECT(读取日志生成报表)
    三、操作类型的权限限制
    按 SQL 操作类型划分权限,避免 “过度授权”:

    SQL 操作        允许角色        限制条件
    SELECT        所有角色(按表权限)        - 禁止SELECT *(必须指定字段)
    - 游戏进程只能查询当前玩家关联数据
    INSERT        游戏进程、GM(受限)        - 禁止向Role表直接插入(通过注册接口生成)
    - 必须校验数据完整性
    UPDATE        游戏进程、GM(存储过程)        - 禁止直接修改Role.Level(通过升级逻辑触发)
    - 必须记录修改日志
    DELETE        DBA、运维(按策略)        - 禁止直接删除Role表数据(标记为禁用状态)
    - 仅允许删除过期日志
    ALTER        DBA        - 生产环境需审批
    - 修改前强制备份
    四、实施步骤与工具
    1. 权限规划阶段
    数据分级:梳理数据库表,按 “玩家隐私> 游戏资产 > 运营数据 > 日志” 分级(参考 NIST 数据分类标准)。
    角色定义:明确组织内的角色(如 DBA、GM、运维),避免 “一人多角色”。
    权限矩阵:为每个角色创建权限矩阵(如下表),明确可访问的表和操作。
    2. 技术实现(以 MySQL 为例)
    sql
    -- 创建GM只读账号
    CREATE USER 'gm_reader'@'%' IDENTIFIED BY 'secure_password';
    GRANT SELECT ON MirDB.Role TO 'gm_reader'@'%';
    GRANT SELECT ON MirDB.Backpack TO 'gm_reader'@'%';
    FLUSH PRIVILEGES;

    -- 创建游戏进程账号(仅允许操作当前玩家数据)
    CREATE USER 'game_server'@'localhost' IDENTIFIED BY 'game_password';
    GRANT SELECT, UPDATE ON MirDB.Role TO 'game_server'@'localhost'
        WHERE CURRENT_USER() = USER();  -- 限制只能操作当前会话关联的用户
    GRANT INSERT, DELETE ON MirDB.Backpack TO 'game_server'@'localhost';
    FLUSH PRIVILEGES;

    -- 创建运维监控账号
    CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor_password';
    GRANT SHOW STATUS, PROCESSLIST ON *.* TO 'monitor'@'%';
    GRANT SELECT ON information_schema.* TO 'monitor'@'%';
    FLUSH PRIVILEGES;
    3. 动态权限控制
    基于时间的权限:GM 账号在非工作时间(如 20:00 - 次日 8:00)自动降级为只读权限。
    基于 IP 的权限:游戏进程账号只能从特定服务器 IP(如 192.168.1.10)连接。
    基于操作频率的限制:防止批量操作(如每分钟最多执行 10 次UPDATE)。
    4. 权限审计与监控
    启用慢查询日志:记录执行时间超过 1 秒的 SQL(含权限信息)。
    部署审计插件:如 MySQL Enterprise Audit,记录所有权限变更和敏感操作。
    定期权限复核:每月核查账号权限,删除冗余权限(如离职员工账号)。
    五、最佳实践与注意事项
    避免使用默认账号:禁用root/sa等超级账号,创建专用 DBA 账号。
    密码管理:
    使用密码管理器生成随机密码(长度≥16,含大小写 / 数字 / 符号)。
    每 90 天轮换一次密码,禁止在代码中明文存储密码。
    存储过程替代直接操作:
    对于敏感操作(如发放物品),通过存储过程封装逻辑:
    sql
    CREATE PROCEDURE sp_GiveItem(
        IN player_id INT,
        IN item_id INT,
        IN count INT,
        IN operator VARCHAR(50)
    )
    BEGIN
        -- 校验权限
        IF EXISTS (SELECT 1 FROM GMAuth WHERE GMName = operator AND Permission = 'GiveItem') THEN
            -- 记录操作日志
            INSERT INTO GMLog (GMName, Action, Timestamp) VALUES (operator, 'GiveItem', NOW());
            -- 执行物品发放
            INSERT INTO Backpack (RoleID, ItemID, Count) VALUES (player_id, item_id, count);
        ELSE
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '权限不足';
        END IF;
    END;

    最小化网络暴露:
    数据库仅开放必要端口(如 MySQL 的 3306),并通过防火墙限制访问 IP。
    优先使用内网连接,禁止公网直接访问数据库。

    通过以上策略,可构建 “分层防御、动态控制、可审计追溯” 的数据库权限体系,在保障游戏功能正常运行的同时,最大限度降低因权限错误导致的数据泄露、篡改风险。核心原则是:“权限永远小于需求,操作必须留痕”。

    您需要登录后才可以回帖 登录 | 立即注册 qq_login

    本版积分规则

    QQArchiver 手机版 小黑屋 39传奇素材网 ( 蜀ICP备2022016510号-3 )

    快速回复 快速发帖 返回顶部 返回列表