iT邦幫忙

0

前後台使用者是否拆分

  • 分享至 

  • xImage

若是全站用同一套使用者,那就是 users 表。若是前後台拆分,就是前台用 members, 後台用 managers(或是admins)但是我看英文的一些討論說完全沒必要拆分。但我被要求拆分。我的上級說,雖然可以透過欄位像是 is_admin 或是角色來區分,但是分開比較安全。有道理嗎?

members如果被某種方式取得,至少還不知道managers。疑問:如果能駭到 members, 不能順便把 managers 也駭到手?如果說不知道表名,隨便猜,managers, admins, users。如果被加上前綴、後綴,查 information_schema表也可以。如果說 information_schema 通常不開放給網站資料庫的帳號密碼,但我沒有收過這樣的規範。

我的表單送出後,都會去查找 information_schema 的表的欄位,例如訂單,就去查訂單表有哪些欄位。如果訂單的表單欄位 input name 跟訂單資料表的欄位一致,那就跑迴圈寫入。當然還要加上 fillable 判斷。像創建者、修改者、創建時間、修改時間,會略過。

如果說不開放 information_schema 給當前網站系統的資料庫連線帳號,那我的系統可能又要調整一番。蠻麻煩的。但我沒收到這個指示。

如果不管業務面,金主,案主什麼的,單純從程式技術、資訊安全來說,前後台使用者拆分,是否有必要?

前後台使用者我仍然有做關聯。其實我只被要求前後台使用者分開,資料表取什麼名稱是我自己定的。我這邊沒人懂 laravel (?! ) 我是這樣做,前台 members, 後台 managers, 然後用 users 做為全站共用的表,也只使用它的 id 欄位。然後另外兩個表都各有 user_id 欄位。這不就又統一了嗎 (呵呵)。只是帳號密碼是存在前後台各自的表。但是其它地方需要記錄哪個使用者,就可以用 users.id。例如訂單表 creator_id, modifier_id,我對應的是 users.id。

大家覺得呢

froce iT邦大師 1 級 ‧ 2024-07-19 10:35:25 檢舉
https://www.cloudflare.com/zh-tw/learning/access-management/role-based-access-control-rbac/

我的建議是權限或role另外一張表,user就單純記帳號資訊,user的一些個資再另外一張表。
把user依權限拆表,會讓系統變得很複雜。
mathewkl iT邦高手 1 級 ‧ 2024-07-19 10:44:46 檢舉
帳號就只是個帳號,真正給予權限的是你前後台給予該帳號的user role,所以不需要區分
我的做法就是全部丟給AD,用群組來管理誰能做什麼功能,誰不行
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
alien663
iT邦研究生 4 級 ‧ 2024-07-19 11:56:21

完全沒道理,使用者的表沒有必要分開前後台,理由如下

  1. 就像你說的,假設被攻破就是整顆DB被搬走,分開表存沒有意義
  2. 權限應該是透過Role控制,所以跟拆開前後台一點關係都沒有
  3. 會導致權限管理機制更複雜,日後維護困難且失誤可能性更高'

現在反而還越來越多站台希望整合會員系統,將這部分功能抽離出來變成一個服務,使各站台可以使用同一個登入系統,減少使用者要記很多帳密的困擾。
我認為現在還特地將Admin另開表來儲存,實屬畫蛇添足的行為。

froce iT邦大師 1 級 ‧ 2024-07-19 14:50:21 檢舉

我猜主管是有遇到過 SQL injection,不是整個DB被攻破,而是單一表被抄走的狀況。
這在早期沒framework的時候應該還蠻常見的。

把權限、使用者都放在一張表的話,的確會有這種顧慮,但用laravel且都寫ORM的狀況下應該是不用擔心這個。

0
h3786010
iT邦新手 5 級 ‧ 2024-07-19 14:24:54

以下為ChatGPT的回答:user和admin帳號共用table優缺點為何?

共用同一個表來存儲user和admin帳號有其優點和缺點,根據具體應用場景可能會有不同的影響。以下是詳細的分析:

優點

  1. 簡化設計

    • 減少表數量:使用單一表存儲所有用戶資料可以簡化數據庫設計和結構。
    • 易於管理:管理一個表比管理多個表更容易,尤其是在進行數據庫遷移、備份和恢復操作時。
  2. 數據一致性

    • 集中存儲:所有用戶信息都集中在一個表中,可以減少數據冗餘和同步問題。
    • 簡化查詢:統一的查詢語句可以處理所有用戶,而不需要在不同表中進行多次查詢。
  3. 方便擴展

    • 靈活性:通過增加角色類型字段(如role),可以方便地擴展不同類型的用戶,而不需要修改數據庫結構。
    • 簡單權限管理:基於角色的訪問控制可以通過單一表來實現,降低實現和維護成本。

缺點

  1. 安全性挑戰

    • 權限隔離:需要在應用層面嚴格控制訪問權限,防止普通用戶執行管理操作。這需要額外的代碼和測試來確保安全性。
    • 潛在漏洞:如果權限控制不當,可能會導致數據洩露或未經授權的操作。
  2. 潛在性能問題

    • 查詢效率:如果用戶數量巨大(例如數百萬用戶),單表的查詢性能可能會下降,尤其是在需要進行大量讀寫操作的情況下。
    • 索引管理:為了提高查詢效率,可能需要在多個字段上建立索引,這會增加數據庫的負擔。
  3. 複雜性增加

    • 代碼複雜性:需要在應用層面進行額外的角色判斷和權限控制邏輯,增加了代碼的複雜性和潛在的bug風險。
    • 測試和維護:需要更多的測試來確保不同角色的功能正確實現,維護成本相對較高。

總結

共用一個表適合數據結構相似且數量不大、要求數據一致性高的應用場景。對於較大的系統或需要高度安全性和性能的場景,可能需要考慮將不同類型的用戶存儲在不同的表中,以便更好地管理和優化。

最終選擇應該根據具體的應用需求、數據量、性能要求以及開發團隊的技術能力來決定。

ronrun iT邦新手 4 級 ‧ 2024-07-19 17:01:24 檢舉

ChatGPT講大原則,而且不一定講的通。像是數百萬用戶,意思是,假設前台會員有數百萬,後台只有二十人,如果分表,後台管理員登入時,只要從二十人中取一,如果合在一起,每次都要從百萬中取一。但是,網站本來就是對外開放,前台使用者數量大,更需要查表。那前台使用者都不擔心百萬取一會很慢很慢,需要擔心後台二十人的效率嗎?如果數量到百萬等級,或許該引入的是資料庫的分區 partition 功能,但是應用上還是視為一張表?

我要發表回答

立即登入回答