MYSQL:带有 if 语句的过程

2024-03-03

我正在尝试制定一个例程,首先检查用户密码,如果正确,它将从不同的表返回一些值或连续更改一些值。

如果不进行在 PHP 中处理的两个查询,这是否可能?首先要求输入密码,检查密码是否正确,然后允许用户更改名称。

下面是使用电子邮件和密码获取用户中的行的示例。

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_user_info`(
    IN in_Email VARCHAR(45),
    IN in_Pass VARCHAR(45)
    )
BEGIN
    SELECT * FROM User WHERE Email = in_Email AND Pass = in_Pass;
END

这就是我到目前为止所得到的:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `change_pass`(
    in_Email VARCHAR(45),
    in_PassOld VARCHAR(45),
    in_PassNew VARCHAR(45)
)
BEGIN
    SET @PassOld = (SELECT Pass From User WHERE Email = in_Email);

    IF(@PassOld = in_PassOld) THEN
        UPDATE User SET Pass = in_PassNew WHERE Email = in_Email;

    END IF;

ENDND IF;
END

感谢您的帮助!


您确实应该对这些密码进行哈希处理,使用以下代码

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `change_pass`(
    in_Email VARCHAR(45),
    in_PassOld VARCHAR(45),
    in_PassNew VARCHAR(45)
)
BEGIN
  DECLARE KnowsOldPassword INTEGER;

  SELECT count(*) INTO KnowsOldPassword 
    FROM User 
    WHERE Email = in_Email AND passhash = SHA2(CONCAT(salt, in_PassOld),512);
  IF (KnowsOldPassword > 0) THEN
    UPDATE User 
      SET Passhash = SHA2(CONCAT(salt, inPassNew),512) 
      WHERE Email = in_Email;
  END IF;
END $$

DELIMITER ;

The salt是表中的额外字段user这或多或少是随机的,但不需要保密。它的作用是打败彩虹桌 http://en.wikipedia.org/wiki/Rainbow_table.
您可以将 salt 设置为短字符串 char(10) 或随机数据。例如

salt = ROUND(RAND(unix_timestamp(now())*9999999999);

您不需要更新盐,只需生成一次然后存储即可。

有关此问题的更多信息请参阅:
使用 PHP 和 MySQL 对我的哈希值加盐 https://stackoverflow.com/questions/3273293/salting-my-hashes-with-php-and-mysql
我应该如何合乎道德地处理用户密码存储以便以后进行明文检索? https://stackoverflow.com/questions/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext-retriev

对您的代码的评论

IF(@PassOld == in_PassOld) THEN  //incorrect 
IF(@PassOld = in_PassOld) THEN   //correct, SQL <> PHP :-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MYSQL:带有 if 语句的过程 的相关文章

随机推荐

  • 检索 Excel 中列等于某值的单元格列表

    我正在尝试在 Excel 中执行某些操作而不使用 VBA 宏 我怀疑这是可能的 但到目前为止还有一些空的 基本上 对于表中的值 我想有条件地检索 A 列中所有值的列表 其中 B 列等于我提供的值 例如 如果 B 列等于 0 我想要一个函数
  • 如何检查 Google Test 是否在我的代码中运行

    我有一段代码 如果正在进行单元测试 我不想运行它 我希望找到一些由 gtest 库设置的 define 标志 我可以检查 我找不到用于此目的的一个 但在查看 gtest 标头后 我找到了一个我认为可以像这样使用的 SomeClass Som
  • 如何同时拖动两个 3D 轴

    基本上 我在一个图中有两个 3d 轴 一个通过 matplotlib animation 构建的动画轴和一个并排的 3d 线图 我想添加功能 以便当您旋转一个轴时 另一个轴也会跟随它的旋转 例如 将当前视角发送到另一个轴的函数 例如 ang
  • 在 Docker 中运行 Blazor

    我使用 Visual Studio 2019 预览版 创建了第一个 Blazor 测试 回购协议是here https github com mitkins holly test 当我在 VS 中点击 IISExpress 按钮时 一切都按
  • Amazon Linux 2 OpenVPN 客户端包不可用?

    当我尝试跑步时sudo yum install openvpn在我刚刚创建的 Amazon Linux 2 实例上 我收到消息 No package openvpn available 我需要添加包存储库吗 我在任何地方都没有发现需要这样做
  • 如何在flutter中过滤列表?

    我正在尝试向我的过滤器添加过滤器list 这就是我所做的 productTemp sort a b gt b productPrice compareTo a productPrice productTemp productTemp whe
  • 如何修复运行 redis:alpine Docker 镜像时出现的警告

    如果我运行Redis 高山 https hub docker com redis 使用命令的 Docker 镜像 docker run redis alpine 我看到几个警告 1 C 08 May 08 29 32 308 Warning
  • 修改android项目名称

    我有没有可能改变name of my project正如它出现在Package Explorer 我正在使用 Eclipse IDE 我尝试编辑string xml in res value文件夹 但这不会在资源管理器视图中更改它 右键单击
  • vue:未捕获类型错误:无法读取未定义的属性...

    我在用着 电子邮件受保护 cdn cgi l email protection和vue 官方 webpack 模板 https github com vuejs templates webpack构建一个应用程序 本地开发时经常看到这样的警
  • 在 Django 应用程序中实现 Facebook 登录的简单且最新的方法

    这个问题在stackoverflow中很常见 并且有很多不同的问题和答案 但我找不到我需要的 首先 我想准确定义我需要的内容 允许用户使用其 Facebook 凭据登录我的应用程序的选项 该应用程序将保存匹配的经典 Django 用户 我只
  • 通过删除旧行自动强制执行最大数据库表大小

    我有一个 Oracle 表 其中包含应用程序的事件日志消息 我们不希望该表增长失控并占用太多空间 因此我们希望将其可以包含的行数设置为某个大数字 例如一百万 所以我们想告诉Oracle 当表变得太大时 它应该删除最旧的行 为新行腾出空间 有
  • 读取文件中的值,循环直到 value = $foo?

    我正在编写一个用于 grep 的 shell 脚本 foo然后计算出现的次数 然后运行命令 每次运行该命令时 该文件中都会减少一个 foo 实例 不确定如何连续读取该文件并减少我设置的变量中的值 count grep o foo some
  • 是否有在线模拟屏幕阅读器工具来测试自定义网页? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们关心我们网站的可访问性 并想看看普通屏幕阅读器如何感知和解码它 不 至少没有任何好处 也不代表屏幕阅
  • Google 地图可以设置为缓慢持续平移吗?就像一场全球革命?

    正如标题所说 我正在寻找解决方案 但没有找到任何可以引导我找到正确文档或文章的内容 如果您有任何想法或可以向我指出一个可以使用的可能解决方案 我将不胜感激 Thanks 你可以自己这样做 Use setInterval https deve
  • OpenGL 实现多通道

    我在移植一些已成功实现的代码时遇到问题着色玩具 https www shadertoy com view XdyfWK对于桌面 OpenGL 问题是我需要创建一个 FrameBufferObject FBO 以便我可以进行离屏计算 稍后将其
  • VB.NET ArrayList 到 List(Of T) 类型复制/转换

    我有一个返回旧式 ArrayList 的第 3 方方法 我想将其转换为类型化 ArrayList Of MyType Dim udc As ArrayList ThirdPartyClass GetValues Dim udcT AS Li
  • 如何获取特定日期的唯一客户和重复客户每天的客户数量?

    我试图从我的订单表中获取结果 以获取第一次订购和重复订单的客户数量列表 像下面这样的东西 Date 1st time time repeat order 2014 09 01 43 90 2014 09 02 3 45 2014 09 03
  • 由于 ISAPI 报告不健康状况,ASP Net Core 应用程序被回收

    我收到系统事件日志条目 An ISAPI reported an unhealthy condition to its worker process Therefore the worker process with process id
  • .NET 生产代码中的“Assert”语句

    离开是否明智Trace Assert and Debug Assert代码中的语句是否 稳定 并且已移至测试和生产环境中 如果是这样 这些断言语句有何帮助 让 Guard 类等检查异常情况并适当引发异常还不够吗 调试断言 http msdn
  • MYSQL:带有 if 语句的过程

    我正在尝试制定一个例程 首先检查用户密码 如果正确 它将从不同的表返回一些值或连续更改一些值 如果不进行在 PHP 中处理的两个查询 这是否可能 首先要求输入密码 检查密码是否正确 然后允许用户更改名称 下面是使用电子邮件和密码获取用户中的