mysql数据库密码安全参数_MySQL 参数解析 password_history

MySQL 8.0 引入新的参数 password_history,用来控制历史密码的使用策略,增强密码安全性。password_history 参数定义了一个阈值,来控制之前使用的密码,在用户修改多少次之后,才能重复使用,该参数设置为0,表示禁用该策略。

password_history:

作用范围:Global

动态修改:Yes

默认值:0

取值范围:0~4294967295

举个例子,设置password_history为3,MySQL 账号 root 其初始密码为 '111111',然后修改密码为'222222',再次将密码修改回'111111'时,就会报错。因为在修改回'111111'之前,密码修改的次数不满足password_history设置的阈值3。

如果修改密码的次数不满足password_history参数设置的阈值时,则会报错,如下:

ERROR 3638 (HY000): Cannot use these credentials for 'root@localhost' because they contradict the password history policy

除了使用参数password_history来控制全局的历史密码使用策略外,还可以在create user和alter user语句中,使用password history 子句单独控制某个用户的历史密码策略,如下所示:

create user app@'%' identified by 'aA@12345678' password history 5;

alter user app@'localhost' identified by 'aA@12345678' password history 5;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用JSP连接MySQL数据库实现注册登录的示例代码。 1. 注册页面(register.jsp) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body> <h3>用户注册</h3> <form action="register.do" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 确认密码:<input type="password" name="confirmPassword"><br> <input type="submit" value="注册"> </form> </body> </html> ``` 2. 注册处理页面(register.do) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <%@ page import="java.io.*" %> <% // 获取注册信息 String username = request.getParameter("username"); String password = request.getParameter("password"); String confirmPassword = request.getParameter("confirmPassword"); // 判断密码是否一致 if (!password.equals(confirmPassword)) { out.print("<script>alert('两次输入的密码不一致,请重新输入!');history.back();</script>"); return; } // 连接数据库 String url = "jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=UTF-8"; String driver = "com.mysql.jdbc.Driver"; String user = "root"; String pass = "root"; Connection conn = null; PreparedStatement pstmt = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, user, pass); // 判断用户名是否存在 String sql = "SELECT * FROM user WHERE username=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { out.print("<script>alert('用户名已存在,请重新输入!');history.back();</script>"); return; } // 插入用户信息 sql = "INSERT INTO user(username, password) VALUES (?, ?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); pstmt.executeUpdate(); // 注册成功,跳转到登录页面 response.sendRedirect("login.jsp"); } catch (Exception e) { e.printStackTrace(); out.print("<script>alert('注册失败,请重试!');history.back();</script>"); return; } finally { try { if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } %> ``` 3. 登录页面(login.jsp) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户登录</title> </head> <body> <h3>用户登录</h3> <form action="login.do" method="post"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html> ``` 4. 登录处理页面(login.do) ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.sql.*" %> <%@ page import="java.io.*" %> <% // 获取登录信息 String username = request.getParameter("username"); String password = request.getParameter("password"); // 连接数据库 String url = "jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=UTF-8"; String driver = "com.mysql.jdbc.Driver"; String user = "root"; String pass = "root"; Connection conn = null; PreparedStatement pstmt = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, user, pass); // 验证用户信息 String sql = "SELECT * FROM user WHERE username=? AND password=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); ResultSet rs = pstmt.executeQuery(); if (rs.next()) { // 登录成功,保存用户信息并跳转到首页 session.setAttribute("username", username); response.sendRedirect("index.jsp"); } else { out.print("<script>alert('用户名或密码错误,请重新输入!');history.back();</script>"); return; } } catch (Exception e) { e.printStackTrace(); out.print("<script>alert('登录失败,请重试!');history.back();</script>"); return; } finally { try { if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } %> ``` 注意事项: 1. 需要在WEB-INF/lib目录下添加MySQL的JDBC驱动包(mysql-connector-java.jar); 2. 数据库连接信息需要根据实际情况进行修改; 3. 代码中没有进行SQL注入和XSS攻击防护,请根据实际情况进行加强。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值