我正在使用一个现有的数据库,其中的密码是这样散列的:
DBMS_UTILITY.GET_HASH_VALUE(the_username || the_password, 1000000000, 1073741824)
Run Code Online (Sandbox Code Playgroud)
我知道由于各种原因这很糟糕(不是正确的加密安全哈希,并且 oracle 使用的算法可能会在版本之间发生变化)。但是该数据库存在,我们不太可能让他们改变这一点,因为他们有很多用户,并且不能简单地切换到正确的散列算法而不让每个人重新输入或重置密码。
现在我需要使用这个数据库进行 LDAP 身份验证(基于 OpenLDAP)。不幸的是,没有办法让 OpenLDAP 将明文密码传递给数据库(然后我可以简单地在明文密码上调用散列函数)。但是,修改 LDAP 客户端是可能的,所以如果我可以创建哈希,一切都会好起来的。
我宁愿避免连接到 Oracle 数据库来执行此操作,因为这也需要该机器上的 Oracle 客户端、数据库登录数据等。因此我想知道是否有关于GET_HASH_VALUE()
可用算法的任何信息。我在谷歌上找不到任何东西,但也许它隐藏在所有有些不相关的结果之间......如果算法最近发生了变化,服务器版本是 11.2.0.3.0。
我有一个包含用户的表。每个用户都有一个主电子邮件和一个指示该用户是否被删除的标志(我们从不硬删除用户)。
但是,每个用户还可以拥有额外的电子邮件。
无论如何,电子邮件地址必须是唯一的,我想在数据库级别强制执行这一点。对于主要电子邮件地址来说这很简单。我可以简单地添加一个带有WHERE not is_deleted
限制的 UNIQUE 索引,以便可以重新使用已删除的用户的电子邮件。
然而,对于辅助电子邮件来说,这就更加棘手。
is_deleted
用户的标志复制到该表,这也很丑陋,但允许我简单地使用 UNIQUE 索引与WHERE not is_deleted
.有没有更好的解决方案来实现我想要做的事情?
postgresql foreign-key database-design constraint unique-constraint