我有一個ASP.NET項目,我想將成員資格(SQL提供程序)保存在單獨的數據庫中,角色/配置文件將按每個應用程序進行。ASP.NET成員資格和角色分隔關係
問題
那是什麼的會員數據庫和角色/檔案數據庫之間的關係到KEY?它是用戶名還是用戶名?
我在單獨的expolrer中打開了表格,並注意到Membership數據庫中的UserID與應用程序角色數據庫中的不同。
我有一個ASP.NET項目,我想將成員資格(SQL提供程序)保存在單獨的數據庫中,角色/配置文件將按每個應用程序進行。ASP.NET成員資格和角色分隔關係
問題
那是什麼的會員數據庫和角色/檔案數據庫之間的關係到KEY?它是用戶名還是用戶名?
我在單獨的expolrer中打開了表格,並注意到Membership數據庫中的UserID與應用程序角色數據庫中的不同。
在這種情況下,您可以做的最好的事情是實現您自己的(自定義)MemberShip和Role Provider。成員資格和角色之間的關係由您自己定義,用戶名通常用於此目的。
備註對詩人的迴應:
也許我不應該提到的「最佳解決方案」,但在我看來默認ASPNET成員資格和角色提供伴隨其使用創建的ASPNET表的ASPNET -regsql命令。如果微軟的會員和角色提供商沒有滿足您的需求,您應該創建自己的。 如果您創建了自己的成員資格和角色提供者,那麼其他開發者就會明白他們正在處理以不同方式工作或提供結構的提供者實現。
我的結論是,我的解決方案可能不是「最好的解決方案」,但更多的是一個建議。另一件事是ASP.NET提供者無論如何都不是好的軟件設計的例子。我們仍在使用它,因爲它們與其他控件兼容。你的解決方案是可以的,但是我的解決方案也可以,而且這取決於先生。賽峯選擇適合他應用的最佳解決方案。
由於微軟提到:
有創建自定義成員提供程序主要有兩個原因。
•您需要將成員資格信息存儲在.NET Framework附帶的成員資格提供程序不支持的數據源中,例如FoxPro數據庫,Oracle數據庫或其他數據源。
•您需要使用
數據庫架構不同於 由 提供商與.NET框架
如果我船使用的數據庫模式來管理會員信息正確讀取您的問題,您希望將成員資格存儲在一個數據庫實例中,並將角色存儲在另一個實例中
這是可以接受的,只需提供不同的連接字符串即可。你沒有不是需要實現一個自定義的提供者。
瞭解角色和成員身份是真正獨立的擔憂,除了MembershipProvider.DeleteUser方法造成的輕微出血外,可以獨立操作。
在角色和成員表之間沒有真正的「關係」,並且任何由aspnet_users表中的記錄外觀推斷出的任何「關係」都是巧合的。如果在爲用戶進行角色查詢時存在記錄,則使用該用戶標識,否則將創建具有新用戶標識的新記錄。
在整個供應商堆棧中使用的常見值是username
字段,雖然它對應用程序而言是唯一的,但它不是關鍵。
因此,只要您知道在調用Membership.DeleteUser時必須手動執行刪除角色記錄,則可以簡單地使用兩個數據庫,不需要自定義實現。
祝你好運
請閱讀我的文章。我在回覆中回覆。 – 2010-07-23 20:27:35
我認爲實施自定義提供者既不要求也不是最好的解決方案。 – 2010-07-18 01:36:59
您能否解釋一下「ASP.NET提供者不是一個好的軟件設計的例子」? – Greg 2010-07-23 20:44:27
當我的應用程序需要一個自定義的MembershipProvider實現時,只需要對用戶進行身份驗證和重定向,它迫使我從基類中實現30個方法,其中90%我永遠不會使用。 這是不好的設計! – 2010-07-24 02:34:18