故障分析 | 没安装 validate_password 插件,为什么会有密码策略?

MySQL数据库安全加固实战:从默认配置到纵深防御 数据库安全是系统架构中的核心环节,其本质在于通过访问控制和权限管理来保护数据资产。基于最小权限原则和纵深防御理念,安全加固需要从网络边界、账户管理、权限控制等多层面构建防御体系。在MySQL数据库的实际运维中,常见的安全风险包括默认端口暴露、弱密码策略、root账户远程访问等,这些隐患极易导致数据泄露和未授权访问。通过实施网络访问控制、强化账户密码策略、启用日志审计等关键技术手段,可以有效提升数据库的整体安全性。本文聚焦于Linux环境下MySQL数据库的实战加固,提供了从风险诊断到具体操作的完整指南,帮助 阅读详情

作者:王顺

爱可生 DBA 团队成员,在公司负责项目中处理数据库问题,喜欢学习技术,钻研技术问题。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

背景

用户遇到问题,生产环境中统一脚本安装的 MySQL 8.0.18,为什么有的环境有密码策略,有的环境没有?

分析

检查配置文件 my.cnf 并没有 validate_password 参数配置。

检查数据库中的参数配置,查到密码策略。

检查数据库的插件并没有 validate_password。

奇怪,为什么配置文件里没有 validate_password 参数,也没有安装过插件,密码策略是怎么来的?

原因

查阅官方文档,找到了原因。

8.0 之后,可以用 validate_password 组件来实现密码策略。

MySQL Components 是 8.0 新功能,用于扩展服务器功能的基于组件的基础结构。组件提供服务器和其他组件可用的服务。(就服务使用而言,服务器是一个组件,与其他组件相同。)组件仅通过它们提供的服务进行交互。

MySQL 发行版包含几个实现服务器扩展的组件:

  • 用于配置错误日志记录的组件。

  • 用于检查密码的组件。

  • 使应用程序能够将其自己的消息事件添加到审核日志的组件。

  • 实现用于访问查询属性的用户定义功能的组件。

https://dev.mysql.com/doc/refman/8.0/en/components.html

删除该组件后,密码策略就失效了。

结论

在 8.0 之前,validate_password 是个单独的插件。

8.0 后可单独安装 validate_password 插件,也可以安装 validate_password 组件来实现密码策略,用户的环境统一脚本安装数据库时,没有安装插件,但单独安装 validate_password 组件也实现了密码策略。

OpenClaw本地AI Agent在Windows 11上的保姆级部署指南 AI Agent是具备感知、规划与工具调用能力的智能体,其核心在于本地化运行、可控记忆与安全执行。OpenClaw作为基于Node.js的开源本地AI Agent框架,依托Windows 11的HVCI虚拟化安全、WSL2无缝集成及微软账户信任链,构建出数据不出域、指令可审计的边缘智能开发环境。技术价值体现在低延迟响应、强进程隔离与配置可追溯性;典型应用场景包括工业设备日志分析、企业内网知识问答与离线AI工作流验证。本指南聚焦Node.js 20.x稳定运行时、Git驱动的配置即代码实践,以及MySQL作为 阅读详情

相关推荐

3DSlicer冠脉分割实战:从DICOM导入到三维重建的完整流程(附常见问题解决)

本文详细介绍了使用3DSlicer进行冠脉分割的完整流程,从DICOM数据导入到三维重建,涵盖环境配置、视图优化、心脏区域分割及冠脉精细分割等关键步骤。针对常见问题提供实用解决方案,帮助医学影像从业者高效完成心血管结构分析,提升诊断准确性。

weixin_29271053的博客 627

mysql安装validate_password密码校验插件

一、查询插件 1、登录mysql,查询已安装的插件:show plugins; 2、查询mysql插件目录位置:show variables like "%plugin_dir%"; 可以看到mysql自带validate_password插件只是没有安装 二、安装插件: 第一种方式(推荐): 命令执行:install plugin validate_password soname 'validate_password.so'; 运行时注册插件。无需重启mysql 第二.

sumengnan的博客 1万+

libero烧录信号抓取

提示:如果改了东西需要重新烧录,需要把这两个界面都关闭再libero打开。两个红色的要关闭掉。然后返回libero开始烧录,观测信号(如果只烧录观测从这一步开始就行)等到下面的messige出现以下信息表示run好了。在下图中右侧可以自己设置,设置完之后记得保存一下。run一下,耐心等待,有警告就ok,run完之后。run成功会变绿色,然后点下面的这个看波形。设置抓取信号:在libero打开。打开的就是烧录界面,直接run。

qq_34047965的博客 1420

mysql 安装插件 validate_password

在做等保的时候,数据库存在一个高风险漏洞,需要修改 二、MySQL数据库 1.无鉴别信息复杂度校验机制(高风险) 建议数据库所在数据库鉴别信息复杂度策略设置为: validate_password_length 8 validat_ password_mixed_case_count 1 validate_password_number_count 1 validate_password policy MEDIUM validate_password_special_char_count 1,且未定期

冰恋云的专栏 1万+

WebUI自动化测试框架搭建(python+pytest+selenium+allure)

将鼠标移动到要定位的元素上面>右键>点击“检查”>在元素代码上右键>复制>复制XPath。

m0_63729339的博客 1281

【ue4】【新手入门】|静态网格模型碰撞设置和合并Actor(合并静态网格体)

上一期学到把构建好的房子模型变成一个静态网格体(也是一个模型)但是静态网格体是没有碰撞的 所以要给这个模型设置碰撞。

m0_63501513的博客 4420

处理mysql报错: Can't open shared library 和 No paths allowed for shared library

安装mysql插件rpl_semi_sync_master时报如下异常: mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/semisync_master.so' (errno: 2 /usr/lib64/mysql/plugin/semisync_master.so:

ohaozy的专栏 2万+

AI编程工具选哪个更高效?开发者深度评测

无论是代码生成、错误修复,还是架构设计,AI都能提供强大的辅助能力。然而,市面上AI编程工具众多,如何选择最适合自己的?本文将从代码质量、响应速度、多语言支持、集成能力等多个维度,为你解析2025年最主流的几款AI编程工具,帮助你做出更高效的选择。根据2025年最新调研数据,全球超过85%的开发者正在使用AI编程工具辅助开发,相比2023年增长了近40%。合理利用AI,能让你的开发效率提升数倍,但真正的核心竞争力,仍然在于你的编程思维和解决问题的能力。:技术较强的开发者、重视数据隐私的企业。

1853

mysql密码认证插件,(四)MariaDB密码验证插件使用示例

示例介绍密码验证插件 Simple Password Check Plugin (MariaDB 10.1.2.加入)——(顺带简单介绍一些 DBeaver 的使用)之前我们在设定 root 密码时,使用的是简单密码“root”,虽然后续连接时,要加 sudo,但是该账号密码依旧可用。以 mariadb-server 现有的状态,新建一个账号:再输入账号信息:然后点击右下角的保存,会有执行语句窗口...

weixin_39598954的博客 1311

2025年有道翻译网页版JS逆向实战:从抓包到AES解密,手把手教你搞定sign签名

本文详细解析2025年有道翻译网页版的JS逆向实战,从抓包分析到AES解密全流程。通过实战演示签名生成机制和AES-CBC解密技术,帮助开发者破解有道翻译的反爬系统,实现高效数据获取。重点涵盖动态密钥处理、错误重试机制及反反爬策略,为开发者提供完整的技术解决方案。

weixin_30379531的博客 505

VN5620以太网测试——环境搭建篇

CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。VN5620 接口支持各种可能的应用。它适用于与其他总线系统、网络参与(例如在模拟和生成帧、测试中的负载和错误)的同步以太网监控。在2021年Vector公司的以太网接口卡VN5610和VN5640设备已经陆续停产,相应被VN5620和VN5650代替。

诊断协议那些事儿's blog 8927

[ERROR] mysqld: Can‘t open shared library ‘/usr/local/mysql/lib/plugin/validate_password.so‘ (errno:

一 问题描述 使用二进制包安装MariaDB后,启动数据库报错: [ERROR] mysqld: Can't open shared library '/usr/local/mysql/lib/plugin/validate_password.so' (errno: 0, cannot open shared object file: No such file or directory) [ERROR] /usr/local/mysql/bin/mysqld: unknown variable 'va.

雅冰石的专栏 8467

在 ABAP 中把变量一次写对:深入理解 FINAL 内联声明与不可变变量

摘要:ABAP中的FINAL声明操作符用于定义不可变变量,强调"当前上下文中的唯一写位置",能有效防止变量被意外修改,提升代码健壮性和可读性。官方建议优先在单次赋值的场景使用FINAL替代DATA。其核心规则包括:1)写位置唯一但可多次执行(如循环内);2)不创建块级作用域;3)对引用变量仅约束引用本身而非对象内容。典型适用场景包括:结果值只读、输入快照保存和中间结果保护。例外情况如游标变量不适用,因需多次写操作。正确使用FINAL可显著降低代码维护风险。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1044

基线管理之MariaDB安全配置

操作系统级权限检查 1、检查数据库的运行权限,不建议以root运行数据库,防止越权攻击 ps -ef | egrep "^mysql.*$" 如图显示mysqld的运行用户为mysql 2、禁用mariadb的历史记录功能 查找缓存文件 find $HOME -name ".mysql_history" 将缓存文件指向空文件 rm -f $HOME/.mysql_history ln -s /dev/null $HOME/.mysql_history 3、查看并配置数据库存放路.

m0_63510587的博客 2478

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

安装mysql插件报错:Can‘t open shared library

安装mysql插件报错:Can’t open shared library 这是提示windows下不能使用.so,要使用.dll 例如: install plugin CONNECTION_CONTROL soname 'connection_control.so'; 运行该语句会报错: 则需要修改: install plugin CONNECTION_CONTROL soname 'connection_control.dll'; ...

weixin_44021888的博客 8093

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Linux服务器安装MySQL,初始化密码后登录使用报如下两个错误:

Linux服务器安装MySQL,初始化密码登录后报错: 1、 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 2、 ERROR 1819 (HY000): Your password does not satisfy the cu...

荆棘云海的博客 1214

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MySQL基础学习: linux系统mysql 密码插件 validate_password安装

2、安装mysql密码插件,执行命令:install plugin validate_password soname ‘validate_password.so’;1、没有安装mysql密码插件,执行命令:SHOW VARIABLES LIKE ‘validate_password%’;5、再次执行命令:SHOW VARIABLES LIKE ‘validate_password%’;3、再次执行:SHOW VARIABLES LIKE ‘validate_password%’;

玉汝于成 1665

牛年伊始,你的mysql密码安全吗?

前言: 新年伊始,你的数据库是不是该巡检了?一般巡检都会关心密码安全问题,比如密码复杂度设置,是否有定期修改等。特别是进行等保评测时,评测机构会要求具备密码安全策略。其实 MySQL 系统本身可以设置密码复杂度及自动过期策略的,可能比较少用,大多数同学并未详细去了解。本篇文章我们一起来学习下如何设置数据库账号密码复杂度及自动过期策略。 1.密码复杂度策略设置 MySQL 系统自带有 validate_password 插件,此插件可以验证密码强度,未达到规定强度的密码则不允许被设置。My...

Hsuesh的博客 502

ERROR 1193 (HY000): Unknown system variable ‘validate_password_policy‘

mysql 5.7安全策略设置 报错ERROR 1193 (HY000): Unknown system variable 'validate_password_policy' 为了方便,想要调低mysql 5.7版本的密码级别,于是乎直接设置: 设置密码策略最低级别 mysql> set global validate_password_policy=0; ERROR 1193 (HY000): Unknown system variable 'validate_password_policy

yang灬仔 7776

mysql环境配置

举例 :我在创建一个表时,该表中有一个字段为name,给name设置的字段类型时 char(10) ,如果我在插入数据的时候,其中name这个字段对应的有一条数据的 长度超过了10 ,例如’1234567890abc’,超过了设定的字段长度10,那么不会报错,并且取前10个字符存上,也就是说你这个数据被存为了’1234567890’,而’abc’就没有了。但是,我们给的这条数据是错误的,因为超过了字段长度,但是并没有报错,并且mysql自行处理并接受了,这就是宽松模式的效果。

weixin_43247990的博客 1062

MySQL密码策略管理插件validate_password

MySQL5.6版本,引入了新密码校验插件validate_password, 用于管理用户密码长度、强度等,保障账号的安全性。本文让我们一起学习一下用户密码策略如何配置,简单易会

陈哈哈的菜园子 1万+

vue校验密码的三种写法

一、在el-form(element ui中的form表单)中使用:rules=“rules” 实现 1.在项目的src/utils文件夹下创建validate.js文件 validate.js文件中内容为: /** * @param value * 测试密码是否满足条件,包括四种类型 */ export function validPassword(value) { const num = /^.*[0-9]+.*/ const low = /^.*[a-z]+.*/ const

qq_43721016的博客 8355

【MySQL密码策略查询为空】validate_password 插件安装

SHOW VARIABLES LIKE 'validate_password%'; 不给返回查询结果,弄了很久很久知道了这个是因为并没有安装 validate_password 插件。

Liming07的博客 2063

MySQL的 validate_password插件 和 validate_password组件

组件和插件插件组件Ubuntu20.04下用apt安装的MySQL8.0默认没有使用validate_password 插件或组件CentOS7下用MySQL官方yum仓库安装的MySQL8.0默认启用validate_password 组件MySQL5.7的 validate_password插件在MySQL8.0中任然可以使用,但默认不使用,已过时,未来准备移除可看到插件变量validate_password之后是下划线_, 组件变量validate_password之后是点.

kfepiza的博客 2495

mysql 5.7安装密码校验插件validate_password

在使用服务器插件之前,必须将它们加载到服务器中。MySQL支持在服务器启动和运行时加载插件。还可以在启动时控制加载插件的激活状态,并在运行时卸载它们。在加载插件时,可以从INFORMATION_SCHEMA获得关于插件的信息。 #查看当前mysql安装的插件信息 #查看当前mysql安装的插件信息 mysql> show plugins; +-------------------...

weixin_33840661的博客 1966

如何在配置文件设置mysql 8的密码验证插件参数

确实没有validate_password这个参数,只有validate_password.check_user_name,validate_password.policy这样的参数。在网上查到都很多资料都是设置 validate_password这个参数,但是这个参数设置后,mysql就启动不了了,不知道是不是mysql 8这个版本使这个参数无效了。发现length被设置为了4,这个参数最小值是4。在测试环境中,密码验证插件这个功能挺烦的,不方便设置简单密码,于是尝试想将其关闭。

xunmeng2002的专栏 1256
上一篇: 技术分享 | MySQL binlog 分析工具 analysis_binlog 的使用介绍
下一篇: 第34问:我没有让 SQL 使用联合索引,但它不听
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值