如何加密MySQL表中的特定列?
我正在尝试创建一个使用MySQL表存储条目的简单消息系统(PHP)页面。我将在表中使用的列的粗略概述为:
(主键,auto_increment)
(指向创建消息的用户的外键)
(提供味精时间戳记的DATETIME条目)
(包含味精的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 ROWBEGIN
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) msgFROM table
同样在这里是类似的问题:
MySQL加密列
以上是 如何加密MySQL表中的特定列? 的全部内容, 来源链接: utcz.com/qa/418319.html