0
我试图通过使用触发器在PostgreSQL数据库中加密密码,但我无法让它工作,我不知道我的错误在哪里。 下面是代码:加密密码触发器
ERROR: record "new" is not assigned yet DETAIL: The tuple structure of a not-yet-assigned record is indeterminate. CONTEXT: PL/pgSQL function encrypt_password() line 3 at assignment
我如何进入我插入,如果不是与NEW
记录:
CREATE TABLE mms_user (
uid serial,
mail text NOT NULL,
passwd text NOT NULL,
usertype integer NOT NULL,
PRIMARY KEY (uid)
);
CREATE FUNCTION encrypt_password() RETURNS TRIGGER AS $$
BEGIN
NEW.passwd = digest(NEW.passwd, 'sha1');
RETURN NEW; END; $$LANGUAGE 'plpgsql';
CREATE TRIGGER encrypt_userdata AFTER INSERT ON mms_user EXECUTE PROCEDURE encrypt_password();
INSERT INTO mms_user values (default, 'who', 'me', 1);
它在执行的时候说,这?
只使用散列函数是不够的,只是添加一个盐没有提高安全性。取而代之的是用随机盐对HMAC进行大约100毫秒的持续时间并用散列表保存盐。使用诸如password_hash,PBKDF2,Bcrypt和类似函数的函数。关键是要让攻击者花费大量时间通过强力查找密码。 – zaph
@RyanVincent哎呀,对不起我的错误,我不是故意处理你的评论,更正。 – zaph
@Roberto Sanchez SHA1是一种加密散列函数,不是加密。哈希函数是单向函数,也就是说它不能恢复到它的输入。加密操作系统是双向的,有一个密钥,加密的数据可以通过密钥恢复到原始值。 – zaph