当前位置: 首页 > 面试题库 >

如何加密MySQL表中的特定列?

纪成礼
2023-03-14
问题内容

我正在尝试创建一个使用MySQL表存储条目的简单消息系统(PHP)页面。我将在表中使用的列的粗略概述为:

msg_id (主键,auto_increment)

user_id (指向创建消息的用户的外键)

时间 (提供味精时间戳记的DATETIME条目)

msg (包含味精的VARCHAR)

可访问的 (仅是一个int(1),0表示除用户本人可以读取msg之外没有其他人,而1则意味着其他人可以读取它)

我想知道的是,加密 味精 字段的最佳方法是什么,这样撬开的眼睛就无法读取它(也就是说,通过打开mysql
CLI或phpMyAdmin并读取连续存储的值)?

如果将“
accessable”设置为0,则只有他/她自己的用户才能读取它(通过访问某些PHP页面),但是如果设置为1,则其他所有人也应该能够读取它。我不知道该如何解决,因此非常感谢您的帮助!


问题答案:

在此处查看可能的加密功能列表:

http://dev.mysql.com/doc/refman/5.1/en/encryption-
functions.html

您可以创建更新触发器并在其中检查字段accessable。像这样:

CREATE TRIGGER crypt_trg BEFORE UPDATE ON table FOR EACH ROW
BEGIN
  IF new.accessable = 0 THEN
    SET new.msg := ENCRYPT(new.msg, 'key');
  ELSE
    SET new.msg := DECRYPT(new.msg, 'key');
  END IF;
END;

您还可以使用以下查询更新表中的所有现有记录:

UPDATE table SET msg = IF(accessable = 0, ENCRYPT(msg, 'key'), DECRYPT(msg, 'key'));

因此,您可以为您的PHP代码选择记录:

SELECT msg_id, user_id, time, IF(accessable = 0, DECRYPT(msg, 'key'), msg) msg
FROM table

UPD。 同样在这里是类似的问题:

MySQL加密列



 类似资料:
  • 问题内容: 我有2个表order_retailer和order_customer 他们都有自动递增的主键order_id 为了使订单ID在整个系统中保持唯一,我希望order_retailer仅将ID作为偶数编号,对于order_customer而言,这些ID为奇数。为此,我必须将autoincrement的增量值设置为2。是否可以在mysql中将其设置为明智的表。 我不要PHP解决方案。请让我知

  • 本文向大家介绍如何在MySQL表中搜索特定字符串?,包括了如何在MySQL表中搜索特定字符串?的使用技巧和注意事项,需要的朋友参考一下 使用等于运算符进行完全匹配- 让我们首先创建一个表- 使用select语句显示表中的所有记录- 输出结果 这将产生以下输出- 以下是在MySQL表中搜索特定字符串的查询- 输出结果 这将产生以下输出-

  • 现在数据被加密保存在数据库中...问题是我们仍然需要能够在MySQL上使用aes_decrypt来解密信息,而它返回null。 在CakePHP 3上,config/app.php: 然后使用: 我的MYSQL表: 注意:地址和注释只是为了测试。 然后,在CakePHP上,我创建了一个自定义数据库类型: 最后,将加密列映射到注册类型,就这样,从现在开始,所有的事情都将自动处理。

  • 问题内容: 我想在整个数据库中查找2-3个不同的列名称,并列出所有包含这些列的表。任何简单的脚本? 问题答案: 要获取所有具有列或数据库中的表:

  • 问题内容: 我的MySQL数据库包含使用不同存储引擎(特别是myisam和innodb)的几个表。如何找出哪些表正在使用哪个引擎? 问题答案: 这将给您(除其他事项外)一列,这是您想要的。

  • 问题内容: 理想情况下,我需要一个等于 但这是非法的。 我不能使用自动递增的字段。 row_number()是需要选择的行。 我该怎么办? 编辑:嗯,我使用iSql * plus进行练习,出于某些原因,使用limit和auto_increment是非法的。我最终创建了一个序列和一个触发器,并且每次输入一个条目时,ID都增加了1。 问题答案: 您可以使用代替。 如文档所述, 第一个参数指定要返回的第