1081 检查密码 (15 分)

本文介绍了一个密码检查功能的实现,确保密码符合特定规则:至少6个字符,包含英文字母、数字和小数点,且必须同时含有字母和数字。文章通过示例展示了如何使用C++进行密码验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1081 检查密码 (15 分)

本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。

输入格式:

输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。

输出格式:

对每个用户的密码,在一行中输出系统反馈信息,分以下5种:

  • 如果密码合法,输出Your password is wan mei.
  • 如果密码太短,不论合法与否,都输出Your password is tai duan le.
  • 如果密码长度合法,但存在不合法字符,则输出Your password is tai luan le.
  • 如果密码长度合法,但只有字母没有数字,则输出Your password needs shu zi.
  • 如果密码长度合法,但只有数字没有字母,则输出Your password needs zi mu.

输入样例:

5
123s
zheshi.wodepw
1234.5678
WanMei23333
pass*word.6

输出样例:

Your password is tai duan le.
Your password needs shu zi.
Your password needs zi mu.
Your password is wan mei.
Your password is tai luan le.
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int  main()
{
    int N;
    string a;
    cin>>N;
    getchar();//清空回车符
    while(N--)
    {
        getline(cin,a);//尽量使用全局函数string类中的getline(),其读入的第二个参数为string
                      //类型,不设置默认是遇到回车停止读入操作
                     //getline(cin,str)函数是处理string类的函数。第二个参数为string类型的变量 
        int l=a.length();
        if(l<6)
        {
            cout<<"Your password is tai duan le."<<endl;
            continue;
        }
        else
        {
            bool f1=false,f2=false,f3=true;

            for(int j=0; j<l; j++)
            {
                if(a[j]>='0'&&a[j]<='9')
                    f1=true;
                else if((a[j]>='a'&&a[j]<='z')||(a[j]>='A'&&a[j]<='Z'))
                    f2=true;
                else if(a[j]=='.');
                else
                {
                    f3=false;
                    break;
                }
            }
            if(!f3)
            {
                cout<<"Your password is tai luan le."<<endl;
            }
            else if(!f1&&f2)
            {
                cout<<"Your password needs shu zi."<<endl;
            }
            else if(!f2&&f1)
            {
                cout<<"Your password needs zi mu."<<endl;
            }
            else
            {
                cout<<"Your password is wan mei."<<endl;

            }
        }
    }
    return 0;
}

 

<think>好的,我现在需要帮用户解决如何在MySQL中使用ALTER USER语句重置密码的问题。用户已经提供了一些引用资料,我需要结合这些资料来整理出一个清晰的教程。 首先,我要确认用户的需求。用户明确提到要使用ALTER USER语句,所以重点应该放在这个命令的使用上。引用中的资料提到了不同的方法,比如ALTER USER和UPDATE语句,但用户特别要求ALTER USER,因此需要集中在这部。 接下来,我需要检查各个引用的内容。引用1、3、4都提到了ALTER USER的用法,而引用2使用的是UPDATE语句,这可能已经过时或者不安全,特别是因为MySQL的版本更新后推荐使用ALTER USER。因此,在教程中应该强调使用ALTER USER而不是直接修改user表。 然后,我需要考虑不同情况下的重置步骤。比如,用户可能需要重置普通用户密码,或者root用户的密码,尤其是在忘记密码的情况下。引用3和4提到了root用户的处理,尤其是在Mac系统上的情况,这可能涉及到安全模式或停止MySQL服务。用户的问题中并没有提到操作系统,但为了全面性,可能需要涵盖常见的情况,比如本地主机和远程主机的用户,以及忘记密码时的特殊步骤。 另外,需要注意语法中的细节,比如用户名的格式('username'@'host'),以及身份验证插件的问题。引用3和4提到使用mysql_native_password插件,这可能是因为MySQL 8.0之后的默认插件不同,需要特别指定。这里可能需要解释一下为什么需要WITH mysql_native_password,或者根据版本调整建议。 然后,我需要组织步骤,使其逻辑清晰。比如,为普通重置和忘记root密码的情况。普通重置可以直接用ALTER USER,而忘记密码则需要停止服务、跳过权限验证等步骤,这在引用3和4中有提到。 同时,需要注意安全性建议,比如设置强密码,以及刷新权限。虽然ALTER USER后可能不需要FLUSH PRIVILEGES,但为了保险起见,可能还是建议执行一下,尤其是在使用UPDATE语句的情况下,但用户的问题是关于ALTER USER,所以这部可能可以省略,或者仅在必要时提到。 最后,要确保示例准确,比如正确的引号和语句结束符号。同时,需要提醒用户替换示例中的密码和用户名,避免直接复制粘贴导致错误。 可能还需要检查语法是否正确,比如是否遗漏了号,或者主机名是否正确。例如,'root'@'localhost'是否正确,远程访问是否需要改为'%'等。 总结一下,教程的结构应该是: 1. 基本语法介绍 2. 重置普通用户密码的步骤 3. 重置root密码的步骤(包括忘记密码的情况) 4. 安全建议和注意事项 5. 示例代码 同时,在相关问题部,可以引导用户了解更多相关操作,比如创建用户、修改权限等,这样有助于他们进一步学习。</think>### 如何使用 ALTER USER 语句在 MySQL 中重置用户密码 #### 一、基本语法 MySQL 从 5.7.6 版本开始推荐使用 `ALTER USER` 语句修改用户密码,语法为: $$ \text{ALTER USER '用户名'@'主机名' IDENTIFIED [WITH 认证插件] BY '新密码';} $$ 其中: - `主机名` 一般为 `localhost`(本地访问)或 `%`(允许远程访问)[^3][^4] - `WITH 认证插件` 可指定密码加密方式(如 `mysql_native_password`),MySQL 8.0+ 默认使用 `caching_sha2_password`[^3] #### 二、具体操作步骤 **1. 重置普通用户密码** ```sql -- 示例:将用户 testuser 的密码改为 "NewPass123!" ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'NewPass123!'; FLUSH PRIVILEGES; -- 刷新权限(非必须但建议执行) ``` **2. 重置 root 密码** *场景1:已知原密码* ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass'; ``` *场景2:忘记 root 密码* 1. 停止 MySQL 服务: ```bash sudo systemctl stop mysql ``` 2. 启动无验证模式: ```bash mysqld_safe --skip-grant-tables & ``` 3. 登录 MySQL 并重置密码: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'TempPass123'; FLUSH PRIVILEGES; ``` 4. 重启 MySQL 服务后使用新密码登录 #### 三、安全建议 1. 密码长度建议 12 位以上,包含大小字母、数字和特殊符号 2. 生产环境避免使用 `WITH mysql_native_password`(仅限兼容旧系统时使用) 3. 修改后建议执行: ```sql SHOW GRANTS FOR '用户名'@'主机名'; -- 验证权限是否正常 ``` #### 四、错误排查 - 错误 1396:用户不存在 → 检查用户名和主机名是否匹配 - 密码策略冲突 → 使用 `SHOW VARIABLES LIKE 'validate_password%';` 查看策略 - 权限不足 → 确保当前用户有 `UPDATE` 权限或 `CREATE USER` 权限[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值