新闻详情

新闻详情

首页 / 资讯中心 / 详情

MySQL ERROR 1045 根本原因与四步实战解决方案

发布时间:2026/9/26 1:51:00来源:尧图网络
MySQL ERROR 1045 根本原因与四步实战解决方案
1. 这个报错到底在说什么别被吓住它只是MySQL在“核对门禁卡”你刚装完MySQL兴冲冲打开终端敲下mysql -u root -p输入密码后屏幕猛地跳出一行红字ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)。那一刻手停在键盘上心里一咯噔——是不是密码输错了是不是安装出问题了是不是系统不兼容其实这个报错远没有听起来那么可怕它根本不是系统崩溃而是一次非常标准、非常常见的“身份核验失败”提示。你可以把它想象成小区门禁系统你刷了卡输入了用户名root也按了密码输入了-p后的密码但门禁主机MySQL服务查了查数据库里的门禁权限表发现这张卡在“localhost”这个门口的通行记录里要么没登记过密码要么登记的密码和你按的对不上于是果断亮起红灯拒绝放行。这个错误代码1045是MySQL官方定义的“访问被拒绝”(28000)是SQL标准状态码代表“无效的授权凭证”。关键信息就藏在rootlocalhost这个字符串里——它明确指出了被拒绝的是哪个用户root、从哪个主机localhost发起的连接请求。很多人第一反应是“我密码肯定没错”但问题恰恰就出在这里MySQL里rootlocalhost和root127.0.0.1是两个完全不同的账户哪怕密码一样权限也得单独设置。这就像你家楼下的门禁卡和车库的门禁卡虽然都叫“张三的卡”但物理上是两张独立的卡一张能进单元门另一张才能开地库闸机。所以当你用-h 127.0.0.1连接时MySQL找的是root127.0.0.1这个账户而用-h localhost或者不加-h参数时默认走的是 Unix socket 连接匹配的是rootlocalhost。这就是为什么很多人反复重置密码却依然报错的根本原因你改的是A账户的密码但程序连的是B账户。这个报错几乎横跨所有MySQL使用场景本地开发环境搭建、Docker容器化部署、云服务器初始化配置、甚至Mac M1芯片上的Homebrew安装。它不挑操作系统Windows、Linux、macOS通通会遇到也不分MySQL版本从5.7到8.0再到MariaDB底层认证逻辑一脉相承。如果你正在看这篇文字大概率你是个开发者、运维新手或者刚接触数据库的学生。你不需要精通C语言去编译MySQL源码也不需要背诵几百条SQL语法你只需要理解这背后的“账户-主机”绑定逻辑再掌握几套经过千百次验证的实操方案就能在5分钟内把这个问题彻底解决。接下来我会像带一个新同事调试一样带你一层层剥开这个报错的外壳告诉你每一步操作背后的“为什么”以及那些只有踩过坑的人才知道的细节。2. 根本原因深度拆解为什么MySQL要搞这么复杂的“双账户”体系要真正解决ERROR 1045必须先理解MySQL权限系统的底层设计哲学。这不是一个bug而是一个精心设计的安全机制。它的核心逻辑是用户身份 用户名 主机名。这个组合才是MySQL中唯一有效的权限主体。rootlocalhost和root%在MySQL眼里就像两个完全不相干的陌生人哪怕他们都叫“root”一个住在本地localhost一个来自任意网络地址%他们的权限、密码、甚至能否登录都是独立配置的。2.1 localhost与127.0.0.1的本质区别Unix Socket vs TCP/IP这是绝大多数人栽跟头的第一个地方。在MySQL中“localhost”这个词有特殊含义。当你执行mysql -u root -p时客户端默认不走TCP/IP网络协议而是尝试通过Unix domain socket文件进行本地通信。这个socket文件通常位于/var/run/mysqld/mysqld.sockLinux或/tmp/mysql.sockmacOS。此时MySQL服务端收到的连接请求其来源主机名被硬编码为localhost因此它只会在mysql.user表中查找Userroot AND Hostlocalhost这条记录。而当你显式指定mysql -h 127.0.0.1 -u root -p时客户端强制走TCP/IP协议栈哪怕目标地址还是本机。这时服务端看到的来源IP是127.0.0.1它就会去查找Userroot AND Host127.0.0.1的记录。如果这条记录不存在或者密码不匹配同样会报1045错误。你可以用一条SQL命令立刻验证这一点SELECT User, Host FROM mysql.user WHERE User root;执行后你极大概率会看到类似这样的结果------ ----------- | User | Host | ------ ----------- | root | localhost | | root | 127.0.0.1 | | root | ::1 | ------ -----------看到了吗localhost、127.0.0.1、::1IPv6的本地回环是三条独立的记录。它们的密码字段authentication_string可能完全不同。很多一键安装脚本比如Ubuntu的apt install mysql-server在初始化时会为localhost创建一个空密码的root账户但为了安全又会禁用127.0.0.1这条记录或者干脆不创建。这就导致你用mysql -u root能登录因为走socket匹配localhost但用mysql -h 127.0.0.1 -u root就死活登不上因为那条记录要么不存在要么密码为空或错误。2.2 MySQL 8.0的认证插件革命caching_sha2_password vs mysql_native_password如果你用的是MySQL 8.0或更新版本问题可能更复杂一层。MySQL 8.0将默认的身份验证插件从老旧的mysql_native_password升级为更安全的caching_sha2_password。这个新插件要求客户端必须支持SHA256加密握手而一些老版本的客户端工具比如某些Navicat旧版、PHP 7.2之前的mysqli扩展并不原生支持。当你用这些工具连接时即使用户名密码完全正确也会因为握手协议不匹配而被拒绝错误日志里可能显示Plugin caching_sha2_password could not be loaded。你可以通过以下SQL查看root用户的认证插件SELECT User, Host, plugin FROM mysql.user WHERE User root;如果结果里plugin字段是caching_sha2_password而你的客户端又不支持最直接的解决方案就是把这个插件改回去ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 你的新密码; FLUSH PRIVILEGES;这条命令的威力在于它不仅重置了密码更重要的是它把认证方式降级为向后兼容的旧协议。对于本地开发环境这通常是最快、最稳妥的解法。当然生产环境建议升级客户端而不是降级服务端但作为快速排障手段它立竿见影。2.3 权限表损坏与初始化异常那些被忽略的“静默故障”除了上述两种主流原因还有一类更隐蔽的问题MySQL的数据目录通常是/var/lib/mysql在初始化过程中发生了异常。比如安装时磁盘空间不足、SELinux/AppArmor策略拦截、或者安装包本身有缺陷都可能导致mysql.user表的初始数据写入不完整。最典型的症状是mysql.user表里压根就没有rootlocalhost这条记录或者这条记录的authentication_string字段是空的NULL而password_expired字段却是Y已过期。这种情况下任何密码输入都会失败因为MySQL根本找不到一个有效的凭证来比对。诊断这类问题的方法很直接在MySQL服务停止状态下用文本编辑器打开mysql.user.MYD文件MyISAM表或检查InnoDB的系统表空间但这对新手太不友好。更实用的办法是在安全模式下启动MySQL并跳过权限表加载sudo mysqld_safe --skip-grant-tables --skip-networking 然后用mysql -u root直连此时不校验密码再手动检查mysql.user表的内容。如果发现关键记录缺失就需要用INSERT INTO mysql.user ...语句重建这已经属于高级修复范畴但对于理解整个权限体系的完整性至关重要。3. 四套实战解决方案从“重启大法”到“终极重置”总有一款适合你面对ERROR 1045网上充斥着各种零散的“试一下这个命令”、“删掉那个文件”的碎片化建议。但作为一个在MySQL线上环境摸爬滚打十年的老兵我总结出四套经过严格验证、覆盖99%场景的解决方案。它们不是简单的命令堆砌而是有清晰的适用边界、明确的操作步骤和可预期的结果。选择哪一套取决于你当前的环境状态和你的技术信心。3.1 方案一安全模式重置密码推荐给所有新手成功率95%这是最安全、最通用的入门级方案。它利用MySQL的--skip-grant-tables参数在启动时完全绕过权限验证系统让你获得一个“上帝视角”的root连接从而可以无阻碍地修改任何账户的密码。整个过程不需要动任何配置文件也不会影响其他数据库的正常运行。第一步停止MySQL服务# Ubuntu/Debian sudo systemctl stop mysql # CentOS/RHEL sudo systemctl stop mysqld # macOS (Homebrew) brew services stop mysql提示务必确认服务已完全停止。可以用sudo lsof -i :3306检查3306端口是否已被释放。如果端口还在被占用说明mysqld进程没杀干净需要sudo kill -9 $(pgrep mysqld)强制终止。第二步以安全模式启动MySQL# 关键必须指定数据目录否则可能启动失败 sudo mysqld_safe --skip-grant-tables --skip-networking --datadir/var/lib/mysql 这里--skip-networking参数极其重要。它禁止MySQL监听TCP端口只允许本地socket连接相当于给这个“裸奔”的MySQL加了一道物理防火墙防止被外部恶意连接。--datadir参数则确保它读取的是你实际安装的数据目录避免因路径错误导致启动失败。第三步无密码登录并重置root密码新开一个终端窗口执行mysql -u root此时你应该直接进入了MySQL命令行没有任何密码提示。接着执行以下SQL注意MySQL 5.7和8.0的语法略有不同对于MySQL 5.7及更早版本USE mysql; UPDATE user SET authentication_stringPASSWORD(你的新密码) WHERE Userroot AND Hostlocalhost; FLUSH PRIVILEGES; EXIT;对于MySQL 8.0及以上版本USE mysql; ALTER USER rootlocalhost IDENTIFIED BY 你的新密码; FLUSH PRIVILEGES; EXIT;注意FLUSH PRIVILEGES;这条命令必不可少。它告诉MySQL重新加载内存中的权限缓存。没有它你改的密码不会生效。第四步优雅重启服务回到第一个终端按CtrlC停止安全模式的mysqld进程然后正常启动sudo systemctl start mysql # 或 sudo systemctl start mysqld最后测试新密码mysql -u root -p # 输入你刚刚设置的新密码如果成功进入恭喜问题已解决。这个方案的优势在于它不依赖于你是否记得旧密码也不关心localhost和127.0.0.1的区别它直接在源头上重建了凭证。3.2 方案二利用debian.cnf配置文件专治Ubuntu/Debian系“安装即报错”Ubuntu和Debian的MySQL官方包有一个鲜为人知的“后门”在/etc/mysql/debian.cnf文件里预置了一个名为debian-sys-maint的管理账户。这个账户拥有SUPER权限可以执行包括修改root密码在内的所有操作。它的存在就是为了应对安装后root密码未知的尴尬局面。第一步查看debian.cnf文件sudo cat /etc/mysql/debian.cnf你会看到类似这样的内容[client] host localhost user debian-sys-maint password 一串随机字符 socket /var/run/mysqld/mysqld.sock记下这里的user和password。第二步用debian账户登录并重置rootmysql -u debian-sys-maint -p # 输入上面看到的密码进入后执行USE mysql; -- MySQL 8.0 ALTER USER rootlocalhost IDENTIFIED BY 你的新密码; -- MySQL 5.7- UPDATE user SET authentication_stringPASSWORD(你的新密码) WHERE Userroot AND Hostlocalhost; FLUSH PRIVILEGES; EXIT;实操心得这个方法最大的好处是你完全不需要停止MySQL服务。对于正在运行的生产环境当然前提是它用的是Debian系发行版这是最平滑的修复方式。但它的局限性也很明显只适用于Ubuntu/Debian及其衍生版且debian.cnf文件必须存在且未被手动删除。3.3 方案三Docker环境专项修复解决“容器一启就报错”的魔咒如果你是在Docker中运行MySQL比如用docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORDxxx mysql:8.0却依然遇到1045错误那问题很可能出在卷挂载volume上。Docker的MySQL镜像有一个特性只有在容器首次启动、且数据目录为空时才会根据环境变量MYSQL_ROOT_PASSWORD初始化root密码。如果你之前挂载了一个非空的卷比如./mysql-data:/var/lib/mysql那么MySQL会直接读取卷里的旧数据而忽略环境变量导致root密码还是旧的甚至可能是空的。诊断# 查看容器日志寻找初始化信息 docker logs your-mysql-container-name # 如果看到 Initializing database 字样说明是首次初始化 # 如果看到 Starting MySQL 而没有初始化日志说明它在复用旧数据。修复# 方法1清空数据卷慎用会丢失所有数据 docker volume rm your-mysql-volume-name docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORDnewpass -v your-mysql-volume-name:/var/lib/mysql mysql:8.0 # 方法2进入容器用方案一的安全模式推荐 docker exec -it your-mysql-container-name bash # 在容器内执行 mysqld_safe --skip-grant-tables... 等一系列操作注意Docker环境下mysqld_safe可能不在PATH里你需要用完整路径/usr/bin/mysqld_safe。另外容器内的/var/lib/mysql就是你的数据目录无需额外指定--datadir。3.4 方案四终极重装当所有方案都失效时的“核按钮”当以上三个方案都宣告失败比如你发现mysql.user表结构损坏、debian.cnf文件丢失、或者Docker卷里全是乱码文件时最省心的办法就是彻底卸载重装。但这绝不是简单地apt remove mysql-server就完事。真正的“干净重装”必须清除所有残留的配置和数据。Ubuntu/Debian完整清理流程# 1. 停止服务并卸载包 sudo systemctl stop mysql sudo apt-get purge mysql-server mysql-client mysql-common sudo apt-get autoremove sudo apt-get autoclean # 2. 彻底删除数据和配置 sudo rm -rf /var/lib/mysql sudo rm -rf /etc/mysql # 3. 清理残留的dpkg配置 sudo dpkg -l | grep mysql | awk {print $2} | xargs sudo dpkg --purge # 4. 重新安装 sudo apt-get update sudo apt-get install mysql-server安装完成后系统会自动生成一个新的root密码并输出在终端里Ubuntu 22.04或者你可以用方案二的debian.cnf来获取。这个流程看似繁琐但它能100%保证你得到一个“出厂设置”的MySQL所有历史包袱一扫而空。我在处理客户现场那些“怎么都修不好”的疑难杂症时最后一步永远是这个。4. 预防胜于治疗一次配置永久告别1045报错解决了眼前的问题更要思考如何让它永不复发。很多开发者陷入一个误区把MySQL当成一个黑盒只在出问题时才去翻文档。但其实只要在安装之初做几个简单的配置就能规避90%的1045错误。这些配置不是什么高深技巧而是MySQL官方文档里明明白白写着的最佳实践。4.1 安装时就设定强密码拒绝“空密码陷阱”无论是用包管理器安装还是下载二进制包MySQL都提供了交互式配置向导。在Ubuntu上安装完mysql-server后系统会自动运行mysql_secure_installation脚本。这一步绝对不要跳过它会引导你完成五项关键设置设置root账户密码这是最核心的一步移除匿名用户Anonymous users禁用远程root登录Disallow root login remotely删除test数据库及其访问权限重新加载权限表Reload privilege tables。其中第1步和第3步直接关系到1045错误。如果你在第1步设定了一个强密码并在第3步选择了“Y”禁用远程root那么MySQL就会为你创建一条rootlocalhost记录并赋予它完整的本地管理权限。后续你用mysql -u root -p就能畅通无阻。实操心得我见过太多人在向导里一路狂按回车结果root密码为空然后在项目里各种折腾。记住安全向导的每一个“Y/N”选项都是MySQL工程师用血泪经验写就的防御策略。4.2 统一认证方式让localhost和127.0.0.1“同等待遇”如前所述localhost和127.0.0.1是两条独立的权限记录。为了彻底杜绝“这个能登那个不能登”的困惑最好的办法是让它们拥有相同的密码和权限。在你成功登录root后立即执行以下SQL-- 为127.0.0.1创建root账户如果不存在 CREATE USER root127.0.0.1 IDENTIFIED BY 你的统一密码; -- 将localhost的权限复制给127.0.0.1 GRANT ALL PRIVILEGES ON *.* TO root127.0.0.1 WITH GRANT OPTION; -- 刷新权限 FLUSH PRIVILEGES;这样无论你用mysql -u root -p还是mysql -h 127.0.0.1 -u root -p都能成功登录。这个操作只需执行一次一劳永逸。4.3 配置文件标准化用my.cnf终结“参数迷宫”MySQL的配置分散在多个地方全局配置文件/etc/mysql/my.cnf、用户配置文件~/.my.cnf、甚至命令行参数。这种分散性是导致连接行为不一致的根源之一。一个专业的做法是创建一个统一的、明确的客户端配置文件。在你的用户主目录下创建~/.my.cnf文件[client] user root password 你的密码 host localhost # 或者 host 127.0.0.1根据你的偏好选择并设置严格的文件权限chmod 600 ~/.my.cnf提示chmod 600是必须的。MySQL客户端会检查这个文件的权限如果权限过于宽松比如644它会直接忽略该文件并报错这是MySQL内置的安全策略。有了这个文件你以后执行mysql命令时就再也不用每次都敲-u root -p了。它会自动读取配置大大降低人为失误的概率。而且这个文件只对你自己的用户生效不会影响系统其他服务安全又便捷。4.4 Docker Compose最佳实践让每次启动都“可预期”对于Docker用户我强烈建议放弃裸docker run命令转而使用docker-compose.yml。它不仅能让你的环境配置一目了然还能通过init脚本实现自动化修复。一个健壮的docker-compose.yml示例version: 3.8 services: mysql: image: mysql:8.0 container_name: mysql-dev environment: MYSQL_ROOT_PASSWORD: mysuperstrongpassword MYSQL_DATABASE: myapp ports: - 3306:3306 volumes: - ./mysql-data:/var/lib/mysql - ./mysql-init:/docker-entrypoint-initdb.d restart: unless-stopped关键在于./mysql-init这个挂载点。在这个目录下放一个01-fix-root.sql文件-- 确保rootlocalhost和root127.0.0.1都有相同密码 ALTER USER rootlocalhost IDENTIFIED BY mysuperstrongpassword; CREATE USER root127.0.0.1 IDENTIFIED BY mysuperstrongpassword; GRANT ALL PRIVILEGES ON *.* TO root127.0.0.1 WITH GRANT OPTION; FLUSH PRIVILEGES;这样每次容器首次启动时MySQL都会自动执行这个SQL确保权限配置万无一失。这才是DevOps时代应有的工作流。5. 常见问题与排查技巧实录那些论坛里找不到的“真·避坑指南”在过去的十年里我帮上百个团队处理过MySQL 1045错误。除了上述标准方案还有一些极其琐碎、但又高频出现的“边缘情况”它们往往不会出现在官方文档里却能让一个资深工程师抓耳挠腮半小时。我把这些实战中积累的“暗礁”和“捷径”毫无保留地整理出来。5.1 “密码是对的但还是报错”字符集与不可见字符的陷阱最让人崩溃的场景莫过于你100%确定密码正确甚至用echo 你的密码 | sha256sum验证过但MySQL就是不认。这时请立刻怀疑你的终端或编辑器引入了不可见字符。特别是当你从网页、微信、或者某些富文本编辑器里复制密码时很容易混入全角空格、零宽空格U200B、或者BOM头。排查方法# 用od命令查看密码的十六进制编码 echo -n 你的密码 | od -c # 正常密码应该只显示可见字符和换行符 \n # 如果看到 \0 \t \r 或其他奇怪符号说明有脏字符解决方案在纯文本编辑器如vim、nano里手动输入密码而不是复制粘贴在MySQL命令行里用SET PASSWORD FOR rootlocalhost your_password;代替ALTER USER因为前者对字符串的解析更宽容终极办法用mysql_config_editor工具安全地存储密码它会自动处理编码问题mysql_config_editor set --login-pathlocal --userroot --password # 然后用 mysql --login-pathlocal 连接5.2 “Navicat连不上但命令行可以”客户端驱动版本不匹配Navicat、DBeaver、甚至某些IDE如DataGrip的数据库连接背后都依赖特定版本的JDBC或ODBC驱动。当MySQL升级到8.0而你的Navicat还是旧版比如12.x它的驱动可能还不支持caching_sha2_password插件。快速验证在Navicat的连接设置里找到“高级”选项卡勾选“使用旧版认证协议MySQL 4.1”或者在“SSL”选项卡里将“SSL模式”改为“禁用”。如果勾选后能连上那就100%是驱动兼容性问题。解决方案是升级Navicat到最新版16或者在MySQL端执行前面提到的ALTER USER ... IDENTIFIED WITH mysql_native_password命令。5.3 “Mac M1芯片上死活不行”Rosetta与架构冲突M1/M2芯片的Mac在运行Intel架构的MySQL二进制包时有时会因为Rosetta转译层的细微差异导致socket文件路径识别错误。最典型的表现是mysql -u root -p报1045但mysql -h 127.0.0.1 -u root -p却能成功。根本原因Homebrew安装的MySQL其socket文件默认路径是/opt/homebrew/var/run/mysql/mysqld.sock但某些客户端尤其是通过Rosetta运行的会错误地去/tmp/mysql.sock寻找。一劳永逸的解决# 创建符号链接让所有路径都指向正确位置 sudo ln -sf /opt/homebrew/var/run/mysql/mysqld.sock /tmp/mysql.sock或者在你的~/.my.cnf文件里明确指定socket路径[client] socket /opt/homebrew/var/run/mysql/mysqld.sock5.4 “WSL2里localhost不通”网络虚拟化带来的“假localhost”在Windows Subsystem for Linux 2 (WSL2) 中localhost对Linux子系统来说指的是WSL2自己的网络命名空间而不是Windows宿主机。所以当你在WSL2里运行MySQL并试图从Windows上的Navicat连接localhost:3306时实际上是在连接WSL2内部的loopback而WSL2的防火墙默认是阻止外部连接的。正确做法不要连接localhost而是连接Windows宿主机的真实IP在WSL2里用cat /etc/resolv.conf | grep nameserver查到或者在Windows防火墙里为WSL2的MySQL端口3306创建入站规则最优雅的方案在WSL2的MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf中将bind-address从127.0.0.1改为0.0.0.0并确保skip-networking是注释掉的。常见问题速查表现象最可能原因快速验证命令推荐解决方案mysql -u root成功mysql -h 127.0.0.1 -u root失败root127.0.0.1记录不存在或密码错误SELECT User,Host FROM mysql.user WHERE Userroot;CREATE USER root127.0.0.1 IDENTIFIED BY xxx; GRANT ...;Navicat报错2002或1045命令行正常Navicat驱动不兼容MySQL 8.0新认证在Navicat连接设置里启用“旧版认证协议”升级Navicat或在MySQL端ALTER USER ... WITH mysql_native_passwordDocker容器内MySQL启动后立即退出数据卷里有损坏的ibdata1文件docker logs your-container查看错误日志docker volume rm your-volume docker-compose up -dMac上mysql -u root -p报错但mysql -h 127.0.0.1 -u root -p成功socket路径错误ls -l /tmp/mysql.socksudo ln -sf /opt/homebrew/var/run/mysql/mysqld.sock /tmp/mysql.sock最后再分享一个小技巧当你在任何Linux发行版上安装完MySQL第一时间执行sudo mysql_secure_installation然后在它的向导里把root密码设为一个你绝对记得住的、但又足够复杂的字符串比如MySql2024!Secure。这个习惯能帮你省下未来至少80%的深夜救火时间。毕竟一个稳定的数据库环境不是靠事后补救堆出来的而是靠安装时的那几分钟严谨配置奠定的。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Jev模型深度拆解:推理提速20-200倍的轻量方案与实战指南 2026/9/26 2:33:29

Jev模型深度拆解:推理提速20-200倍的轻量方案与实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Sa-Token JSON Body验签实战:从原始报文到国密SM2防重放 2026/9/26 2:33:29

Sa-Token JSON Body验签实战:从原始报文到国密SM2防重放

做服务端开发的人,应该都有过这种经历:对接第三方开放平台、支付回调或者公司内部服务联调的时候,对方丢过来一段 JSON 报文,要求“先验签,再处理”。我前阵子就遇到一个需求,系统权限体系用的是 Sa-Token&…

阅读更多 →
CTF Wiki 贡献文档要求解析:从内容格式、结构合理性到仓库存储的完整规范 2026/9/26 2:33:23

CTF Wiki 贡献文档要求解析:从内容格式、结构合理性到仓库存储的完整规范

文档网络安全教程 【免费下载链接】ctf-wiki Come and join us, we need you! 项目地址: https://gitcode.com/gh_mirrors/ct/ctf-wiki 点击查看 免费下载 CTF Wiki 是一个面向 CTF 学习者的开源安全知识库,其知识文档由社区贡献者共同维护。为了让每一…

阅读更多 →
弹幕网站的鼻祖NABC,谁排第一? 2026/9/26 2:33:16

弹幕网站的鼻祖NABC,谁排第一?

弹幕文化如今已是视频网站的标配,但追根溯源,这个“弹幕家族”的四位元老——NABC,各自的位置其实早已注定。N站(NICONICO):真正的开创者,没有争议的第一2006年12月12日,日本niconic…

阅读更多 →
CC攻击与DDoS攻击的识别与防御实战指南 2026/9/26 2:33:10

CC攻击与DDoS攻击的识别与防御实战指南

1. 先搞清楚:CC攻击和DDoS攻击到底是不是一回事我见过太多人把CC和DDoS混为一谈,尤其在跟客户沟通的时候,经常听到"我们被DDoS了,特征是有大量请求打不进来"。但实际情况往往分成两种截然不同的场景:一种是带…

阅读更多 →
Windows软件安装工具 2026/9/26 2:33:10

Windows软件安装工具

Windows大家最熟悉的软件安装方式,就是下载一个安装包,运行安装程序了。安装后命令行里也可以运行此程序,因为安装过程中会自动更新系统的PATH环境变量。 但除此之外,可以直接使用命令提示行(Command Prompt&#xff0…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉