2010-01-29 42 views
2

「安全外部密碼存儲」有什麼用?在oracle中創建密碼字段

我可以使用「安全外部密碼存儲」在我的Oracle表中創建密碼字段嗎?或者如何在不使用「安全外部密碼存儲」的情況下在我的Oracle表中創建密碼字段?

回答

3

,而無需使用「安全外部口令存儲」(無論其可以是)一種方法是將一個RAW(16)列添加到表中存儲散列的用戶名和密碼:

alter table mytable add password raw(16); 

然後存儲在它的散列用戶名和密碼這樣的:

insert into mytable (username, password, ...) 
values (:username, dbms_obfuscation_toolkit.md5 
         (input => utl_i18n.string_to_raw 
            (upper(:username)||:password)) 
     ); 

然後當用戶嘗試使用用戶名和密碼登錄,您可以檢查他們是這樣的:

select 'OK' 
from mytable 
where username = :username 
and password = dbms_obfuscation_toolkit.md5 
         (input => utl_i18n.string_to_raw 
            (upper(:username)||:password)); 

這樣,沒有人可以找出存儲的密碼是什麼(除了通過暴力)。

2

安全外部密碼存儲區不是爲常規用戶帳戶設計的。其目的是在可靠地保持它需要連接到從自主工藝數據庫(如,說,shell腳本)應收passords:

安全外部密碼存儲 使用Oracle錢包持有一個或 更多用戶名/密碼組合 運行沒有用戶交互運行的批處理進程和其他任務 。

Find out more

爲什麼你想要在數據庫中存儲用戶密碼?如果您希望用戶通過單獨識別的帳戶進行連接,請使用Oracle的USER功能。如果你正在構建一個網站,並且你的用戶將通過一個通用用戶進行連接,那麼認證最好通過中間層進行管理,通過LDAP(或其他)對Active Directory(或其他)進行認證。

但是,如果你真的想推出自己的認證,然後使用單向哈希,如託尼建議的路要走。但是,如果您使用的是Oracle的最新版本(並且您對安全的外部密碼存儲庫感興趣,則表明您至少使用10g),那麼您應該使用DBMS_CRYPTO.HASH() with the SHA-1 algorithm而不是較舊的MD5。

+0

好點 - 我必須調查DBMS_CRYPTO。我使用存儲在數據庫中的密碼的原因是我正在面向公衆的網站上任何人都可以註冊自己。當然,使用Apex構建! – 2010-01-29 14:46:43

+0

@Tony Andrews - 當然是Apex - 有沒有其他工具? – APC 2010-01-29 15:45:21