<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>MySQL 误操作 on Zero Day Notes</title>
        <link>https://blog.5772447.xyz/tags/mysql-%E8%AF%AF%E6%93%8D%E4%BD%9C/</link>
        <description>Recent content in MySQL 误操作 on Zero Day Notes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Mon, 31 Aug 2026 07:00:00 +0800</lastBuildDate><atom:link href="https://blog.5772447.xyz/tags/mysql-%E8%AF%AF%E6%93%8D%E4%BD%9C/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>记一次堡垒机上线后运维账号收口不彻底导致生产 MySQL 被误操作的排查实录</title>
            <link>https://blog.5772447.xyz/posts/67067680/</link>
            <pubDate>Mon, 31 Aug 2026 07:00:00 +0800</pubDate>
            <guid>https://blog.5772447.xyz/posts/67067680/</guid>
            <description>&lt;h2 id=&#34;问题背景&#34;&gt;&lt;a href=&#34;#%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;问题背景&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;公司安全基建升级，计划上线堡垒机（JumpServer）实现「所有运维操作必须走堡垒机、所有服务器 SSH 必须走跳板、DB 账号密码统一托管」三收口。堡垒机上线后，运维团队把「服务器 SSH 登录」和「Web 管理界面」都切到了堡垒机，表面看收口完成。&lt;/p&gt;&#xA;&lt;p&gt;但在一次生产变更中，DBA 误把「生产库 ALTER TABLE」脚本跑到了「核心业务库」，造成业务中断 40 分钟。事后复盘发现：虽然堡垒机已上线，但「DB 直连账号」和「跳板机白名单」仍存在历史遗留的直连通道，导致「堡垒机只是多了一层、不是唯一通道」。安全团队要求彻查「账号收口不彻底」的全链路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;故障现象&#34;&gt;&lt;a href=&#34;#%e6%95%85%e9%9a%9c%e7%8e%b0%e8%b1%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;故障现象&#xD;&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;2026-08-30 02:17，DBA 小李在本地用 &lt;code&gt;mysql -h core-db.prod.internal -u app_rw -p&lt;/code&gt; 直连生产核心库，执行了 &lt;code&gt;ALTER TABLE order_items ADD COLUMN ext_json JSON&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;02:19，核心业务接口开始报错「Unknown column &amp;rsquo;ext_json&amp;rsquo;」，订单创建/支付全部失败。&lt;/li&gt;&#xA;&lt;li&gt;02:21，监控告警「核心库 QPS 骤降 90%」，值班 SRE 发现「堡垒机会话日志里没有这条 ALTER 操作」。&lt;/li&gt;&#xA;&lt;li&gt;02:25，DBA 意识到跑错库，紧急回滚，但 &lt;code&gt;ext_json&lt;/code&gt; 列已写入，需做 &lt;code&gt;pt-online-schema-change&lt;/code&gt; 反向变更。&lt;/li&gt;&#xA;&lt;li&gt;02:40，业务恢复，累计影响订单 1200+ 笔、支付失败 800+ 笔。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;关键信号：堡垒机上线后，DB 直连仍可绕过堡垒机，且堡垒机会话审计完全缺失这条高危操作。&lt;/p&gt;&#xA;&lt;h2 id=&#34;排查过程&#34;&gt;&lt;a href=&#34;#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;排查过程&#xD;&#xA;&lt;/h2&gt;&lt;h3 id=&#34;第一步确认堡垒机是否真正收口&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%b8%80%e6%ad%a5%e7%a1%ae%e8%ae%a4%e5%a0%a1%e5%9e%92%e6%9c%ba%e6%98%af%e5%90%a6%e7%9c%9f%e6%ad%a3%e6%94%b6%e5%8f%a3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第一步：确认堡垒机是否真正「收口」&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;堡垒机（JumpServer）已上线 3 周，SSH 登录必须走堡垒机、Web 管理必须走堡垒机。检查堡垒机「会话录像」和「命令审计」，08-30 02:17 没有任何 &lt;code&gt;mysql&lt;/code&gt; 相关会话。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 在堡垒机管理后台搜索&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;user: app_rw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;asset: core-db.prod.internal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;time: 2026-08-30 02:00-03:00&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 结果：无记录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;说明 DBA 不是通过堡垒机连的 DB。&lt;/p&gt;&#xA;&lt;h3 id=&#34;第二步检查跳板机白名单&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%ba%8c%e6%ad%a5%e6%a3%80%e6%9f%a5%e8%b7%b3%e6%9d%bf%e6%9c%ba%e7%99%bd%e5%90%8d%e5%8d%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第二步：检查跳板机白名单&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;跳板机（Bastion Host）是堡垒机的前置层，所有服务器 SSH 必须先登录跳板机，再从跳板机 &lt;code&gt;ssh&lt;/code&gt; 到目标服务器。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 检查跳板机 /etc/ssh/sshd_config 的 AllowUsers / Match User&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Match User app_rw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    AllowTcpForwarding yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    PermitOpen any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;PermitOpen any&lt;/code&gt; 允许 app_rw 从跳板机任意端口转发到任意目标，这意味着 app_rw 可以从本地 &lt;code&gt;ssh -L 3306:core-db.prod.internal:3306 jumpbox&lt;/code&gt; 再用本地 3306 端口直连 DB，完全绕过堡垒机。&lt;/p&gt;&#xA;&lt;h3 id=&#34;第三步检查-db-账号直连白名单&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%b8%89%e6%ad%a5%e6%a3%80%e6%9f%a5-db-%e8%b4%a6%e5%8f%b7%e7%9b%b4%e8%bf%9e%e7%99%bd%e5%90%8d%e5%8d%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第三步：检查 DB 账号直连白名单&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;检查 MySQL &lt;code&gt;mysql.user&lt;/code&gt; 表和 &lt;code&gt;information_schema.processlist&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;user&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;host&lt;/span&gt;, plugin, authentication_string&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; mysql.&lt;span style=&#34;color:#66d9ef&#34;&gt;user&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;user&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;IN&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app_rw&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app_ro&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;backup&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;结果发现：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;user     host                    plugin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app_rw   10.8.0.%                mysql_native_password&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app_rw   172.16.%.%              mysql_native_password&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;app_rw   bastion-01.internal     caching_sha2_password&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;10.8.0.%&lt;/code&gt; 和 &lt;code&gt;172.16.%.%&lt;/code&gt; 是办公网和开发网段，意味着「只要知道密码，任何开发机/办公 PC 都能直连生产 DB」，完全绕过堡垒机。&lt;/p&gt;&#xA;&lt;h3 id=&#34;第四步检查历史直连脚本与跳板机配置漂移&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e5%9b%9b%e6%ad%a5%e6%a3%80%e6%9f%a5%e5%8e%86%e5%8f%b2%e7%9b%b4%e8%bf%9e%e8%84%9a%e6%9c%ac%e4%b8%8e%e8%b7%b3%e6%9d%bf%e6%9c%ba%e9%85%8d%e7%bd%ae%e6%bc%82%e7%a7%bb&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第四步：检查历史「直连脚本」与「跳板机配置漂移」&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;检查 DBA 本地 &lt;code&gt;~/.my.cnf&lt;/code&gt; 和团队 Wiki，发现：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;旧脚本 &lt;code&gt;prod-db-connect.sh&lt;/code&gt; 仍使用直连方式（&lt;code&gt;mysql -h core-db.prod.internal&lt;/code&gt;）&lt;/li&gt;&#xA;&lt;li&gt;跳板机白名单在 2026-07-15 曾因「紧急修复某业务连通性」临时放开 &lt;code&gt;PermitOpen any&lt;/code&gt;，事后未收口&lt;/li&gt;&#xA;&lt;li&gt;堡垒机上线 checklist 里「DB 账号收口」被标记「已完成」，但实际只做了「堡垒机 Web 管理界面托管密码」，没有做「DB 驱动层强制走堡垒机代理」&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第五步确认误操作路径&#34;&gt;&lt;a href=&#34;#%e7%ac%ac%e4%ba%94%e6%ad%a5%e7%a1%ae%e8%ae%a4%e8%af%af%e6%93%8d%e4%bd%9c%e8%b7%af%e5%be%84&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;第五步：确认误操作路径&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;DBA 小李的本地操作：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 本地执行&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mysql -h core-db.prod.internal -u app_rw -p&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 输入密码后直连成功，执行 ALTER&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这条连接没有经过堡垒机，也没有经过跳板机审计，完全「裸奔」。&lt;/p&gt;&#xA;&lt;h2 id=&#34;解决方案&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解决方案&#xD;&#xA;&lt;/h2&gt;&lt;h3 id=&#34;1-立即止血禁用直连账号收紧跳板机白名单&#34;&gt;&lt;a href=&#34;#1-%e7%ab%8b%e5%8d%b3%e6%ad%a2%e8%a1%80%e7%a6%81%e7%94%a8%e7%9b%b4%e8%bf%9e%e8%b4%a6%e5%8f%b7%e6%94%b6%e7%b4%a7%e8%b7%b3%e6%9d%bf%e6%9c%ba%e7%99%bd%e5%90%8d%e5%8d%95&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;1. 立即止血：禁用直连账号、收紧跳板机白名单&#xD;&#xA;&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# MySQL 紧急禁用直连&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RENAME USER &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app_rw&amp;#39;&lt;/span&gt;@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;10.8.0.%&amp;#39;&lt;/span&gt; TO &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app_rw_legacy&amp;#39;&lt;/span&gt;@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;10.8.0.%&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RENAME USER &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app_rw&amp;#39;&lt;/span&gt;@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;172.16.%.%&amp;#39;&lt;/span&gt; TO &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;app_rw_legacy&amp;#39;&lt;/span&gt;@&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;172.16.%.%&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FLUSH PRIVILEGES;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;跳板机配置收口：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# /etc/ssh/sshd_config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Match User app_rw&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    AllowTcpForwarding no&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    PermitOpen bastion-01.internal:3306&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 只允许转发到堡垒机代理端口&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h3 id=&#34;2-db-账号全面收口到堡垒机&#34;&gt;&lt;a href=&#34;#2-db-%e8%b4%a6%e5%8f%b7%e5%85%a8%e9%9d%a2%e6%94%b6%e5%8f%a3%e5%88%b0%e5%a0%a1%e5%9e%92%e6%9c%ba&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;2. DB 账号全面收口到堡垒机&#xD;&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;所有生产 DB 账号（&lt;code&gt;app_rw&lt;/code&gt;、&lt;code&gt;app_ro&lt;/code&gt;、&lt;code&gt;backup&lt;/code&gt;）只保留 &lt;code&gt;bastion-01.internal&lt;/code&gt; 一个 host 白名单&lt;/li&gt;&#xA;&lt;li&gt;密码统一托管到堡垒机「数据库资产」，运维人员必须通过堡垒机 Web 界面或堡垒机代理端口连接&lt;/li&gt;&#xA;&lt;li&gt;堡垒机开启「数据库会话录像」和「SQL 审计」&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;3-跳板机白名单收口--堡垒机前置&#34;&gt;&lt;a href=&#34;#3-%e8%b7%b3%e6%9d%bf%e6%9c%ba%e7%99%bd%e5%90%8d%e5%8d%95%e6%94%b6%e5%8f%a3--%e5%a0%a1%e5%9e%92%e6%9c%ba%e5%89%8d%e7%bd%ae&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;3. 跳板机白名单收口 + 堡垒机前置&#xD;&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;跳板机 &lt;code&gt;PermitOpen&lt;/code&gt; 只允许转发到堡垒机 IP&lt;/li&gt;&#xA;&lt;li&gt;所有服务器 SSH 登录必须先登录堡垒机，再从堡垒机 &lt;code&gt;ssh&lt;/code&gt; 到目标（跳板机仅作为堡垒机后端，不再暴露给用户）&lt;/li&gt;&#xA;&lt;li&gt;堡垒机「资产」里所有服务器的「连接方式」统一改为「SSH → 堡垒机」&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;4-建立账号收口验收门禁&#34;&gt;&lt;a href=&#34;#4-%e5%bb%ba%e7%ab%8b%e8%b4%a6%e5%8f%b7%e6%94%b6%e5%8f%a3%e9%aa%8c%e6%94%b6%e9%97%a8%e7%a6%81&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;4. 建立「账号收口」验收门禁&#xD;&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;新服务器上线 checklist 必须包含「堡垒机资产录入 + DB 账号收口验证」&lt;/li&gt;&#xA;&lt;li&gt;每月做一次「直连白名单扫描」（脚本扫描 &lt;code&gt;mysql.user&lt;/code&gt; 的非堡垒机 host）&lt;/li&gt;&#xA;&lt;li&gt;堡垒机「会话缺失告警」：如果服务器上有登录但堡垒机无记录，立即告警&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;根因分析&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e5%9b%a0%e5%88%86%e6%9e%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根因分析&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;根本原因&lt;/strong&gt;：堡垒机上线 checklist 只做了「形式收口」（Web 管理界面托管密码），没有做「链路收口」（DB 驱动层、跳板机白名单、服务器 SSH 登录全部强制走堡垒机）。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;直接原因&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;跳板机 &lt;code&gt;PermitOpen any&lt;/code&gt; 未收口，允许本地端口转发直连 DB&lt;/li&gt;&#xA;&lt;li&gt;MySQL &lt;code&gt;user.host&lt;/code&gt; 白名单仍保留办公网/开发网段&lt;/li&gt;&#xA;&lt;li&gt;堡垒机 checklist 把「DB 账号收口」标记「已完成」，但实际只托管了密码，没有切断直连&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;管理原因&lt;/strong&gt;：安全团队和运维团队对「收口」的理解不一致——安全团队认为「必须走堡垒机」，运维团队认为「堡垒机上线了、密码托管了」就是收口，缺少「可验证的收口证据」。&lt;/p&gt;&#xA;&lt;h2 id=&#34;预防措施&#34;&gt;&lt;a href=&#34;#%e9%a2%84%e9%98%b2%e6%8e%aa%e6%96%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;预防措施&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;堡垒机 checklist 必须包含「链路验证」&lt;/strong&gt;：不仅要托管密码，还要验证「直连是否失败」「堡垒机会话是否记录」&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;每月做一次「直连白名单扫描」&lt;/strong&gt;：脚本扫描 &lt;code&gt;mysql.user&lt;/code&gt;、&lt;code&gt;redis.conf&lt;/code&gt;、&lt;code&gt;mongo.conf&lt;/code&gt; 等所有可能直连的配置，输出「非堡垒机 host」清单，纳入安全巡检&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;跳板机白名单收口 + 堡垒机前置&lt;/strong&gt;：跳板机只允许转发到堡垒机，堡垒机作为唯一入口&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;建立「会话缺失告警」&lt;/strong&gt;：服务器 &lt;code&gt;/var/log/auth.log&lt;/code&gt; 有登录但堡垒机无记录，立即告警&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;DBA 工具链升级&lt;/strong&gt;：所有 DB 连接必须走堡垒机代理（&lt;code&gt;mysql -h bastion-proxy.internal -P 33061&lt;/code&gt;），本地 &lt;code&gt;~/.my.cnf&lt;/code&gt; 全部删除或指向代理&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总结&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;堡垒机上线只是「安全收口」的起点，不是终点。真正的收口需要「链路验证 + 白名单收口 + 会话审计 + 门禁验收」四层保障。一次 MySQL 误操作暴露了「形式收口 vs 实质收口」的差距，也推动团队建立了「每月直连白名单扫描 + 会话缺失告警 + 堡垒机 checklist 链路验证」三道防线。安全基建不是「装个设备就完事」，而是「持续验证、持续收口、持续审计」。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
