2012-06-11 34 views
0

因此,我正在使用一個非常舊的系統,它使用一個人的mysql數據庫憑證來認證一個網站(數據庫最初只能從命令行訪問,但現在可以從一個php前端)。由於某些內部原因(並保留用戶的歷史記錄),我必須保留原來的身份驗證。我一直在向這個系統添加openid身份驗證。不知何故,我需要能夠通過openid登錄到網站(順便說一下,使用Zend框架)來檢索用戶的mysql用戶名和密碼。我想過只需要在第一次登錄時註冊,用戶必須提供他們的mysql憑據,但我寧願不存儲密碼純文本。 我也考慮清空每個人的mysql密碼,並手動設置用戶的mysql用戶名(而不是讓用戶提供這個,因爲他們可以提供任何用戶名)。 這正在變成一場安全噩夢。有沒有人對替代品有任何建議?用openid替換mysql用戶認證

順便說一下,這是在Linux服務器上運行的。另外,我不能使用mysql可插拔認證,因爲mysql版本是5.0(可插入認證需要mysql 5.5),不,我不能更新它。

回答

2

MySQL passwords are hashed,所以你將無法從MySQL中提取明文密碼。我想,讓你有兩個選擇,這兩者都在你的問題考慮:

  • 的用戶第一次使用OpenID登錄,與已知爲新密碼替代用戶的MySQL中的密碼你應用。您的應用程序使用該密碼登錄任何使用OpenID的用戶的帳戶。

    Con:使用OpenID的用戶無法返回使用直接MySQL身份驗證,因爲他們不知道自己的密碼了。甚至沒有使用MySQL命令行工具。這意味着曾經使用過OpenID的用戶必須永遠使用OpenID。

  • 當用戶註冊使用OpenID時,您的應用程序會密碼。

    缺點:您的應用程序保持明文口令

    精讀的列表:您的應用程序中斷,當用戶自己改變他們的MySQL密碼。

第三種選擇:

  • 對於誰使用OpenID每個用戶,創建第二個MySQL用戶對他們來說,這有一個通用的密碼。將分配給普通帳戶的所有權限複製到該「影子」帳戶。

    缺點:普通用戶和陰影用戶必須保持同步,因此,如果一些MySQL的權限,添加或撤消了一個,他們也應該添加或在同一時間,另一個撤銷。忘記做這將導致一團糟。

0

鑑於您無法對CLI客戶端(即使是使用PAM)進行明智的openid身份驗證,我會強烈建議您不要嘗試將openid用戶與mysql用戶進行協調 - 只需添加任何人都可以驗證的通用用戶通過openid可以用來連接數據庫。

+0

這是一個簡單的解決方案,但它只適用於每個人都有相同的權限訪問數據庫(即只讀與讀取+寫入,他們有權訪問哪些表等)。否則,沒有一個通用帳戶可以擁有正確的MySQL權限集,以覆蓋每個用戶應該訪問數據庫的權限。 – Celada

+0

我當然同意,但在這種特殊情況下,這樣做效果不佳。這是我的最後手段,如果我不能找出其他東西:) – David

+0

塞拉達 - 這正是問題所在。該系統最初設置爲完全基於他們的mysql帳戶委託權限。提供一個通用賬戶意味着給予每個人相同的權限。 – David