SQLPlus INSERT INTO "(USER)" ."USERS"(USER_NAME、USER_PASS)< "how to hash password"



早上好,

我确信这是一个重复的问题,但由于我不是SQL人员,我很难正确地使用这个词,我只是被赋予了这个任务。

我使用的是ORACLE SQLPlus,在SQLDeveloper中我有";其他用户">SuperAdmin,下表名为USERS。

要将新用户添加到此数据库,我正在使用:

INSERT INTO "SUPERADMIN"."USERS" (USER_NAME, USER_PASS) VALUES ('SUPERTEST', 'NewPassword01')

它添加了我的用户,但我如何散列出纯文本密码?

如果这是重复的,我再次表示最诚挚的歉意。

假设USER_PASS列具有RAW数据类型,则使用STANDARD_HASH函数:

INSERT INTO SUPERADMIN.USERS (
USER_NAME,
USER_PASS
) VALUES (
'SUPERTEST',
STANDARD_HASH( 'NewPassword01', 'SHA1' )
);

(第二个参数的有效哈希算法为:SHA1SHA256SHA386SHA512MD5。(

db<gt;小提琴这里


更新

我看过设置,USER_PASS是SimpleVARCHAR2

您应该真正弄清楚当前系统是如何对字符串进行哈希和编码的,因为如果您不使用完全相同的方法,那么事情就会出错。

如果您想将RAW值转换为不带任何编码的字符串,可以使用UTL_RAW.CAST_TO_VARCHAR2

INSERT INTO USERS (
USER_NAME,
USER_PASS
) VALUES (
'SUPERTEST',
UTL_RAW.CAST_TO_VARCHAR2(
STANDARD_HASH( 'NewPassword01', 'SHA1' )
)
);

如果您想将RAW输出编码为十六进制字符串,可以使用RAWTOHEX来转换它:

INSERT INTO USERS (
USER_NAME,
USER_PASS
) VALUES (
'SUPERTEST',
RAWTOHEX( STANDARD_HASH( 'NewPassword01', 'SHA1' ) )
);

如果您想要Base64编码中的值,也可以使用UTL_ENCODE.BASE64_ENCODE

INSERT INTO USERS (
USER_NAME,
USER_PASS
) VALUES (
'SUPERTEST',
UTL_RAW.CAST_TO_VARCHAR2(
UTL_ENCODE.BASE64_ENCODE(
STANDARD_HASH( 'NewPassword01', 'SHA1' )
)
)
);

正如你所看到的,它们都接受相同的输入,但它们给出的值非常不同:

SELECT * FROM superadmin.users;

输出:

USER_NAME|USER_PASS:--------|:---------------------------------------超级测试|%U(?Q0?????lR?xm/超级测试|255529AE5130DAB082A29CAC6C52BC20786D2F01超级测试|JVUprlEw2rCCopysbFK8IHhtLwE=

db<gt;小提琴这里

相关内容

最新更新