iT邦幫忙

1

前後台使用者是否拆分

  • 分享至 

  • 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,用群組來管理誰能做什麼功能,誰不行
harry731 iT邦新手 2 級 ‧ 2024-07-26 08:48:13 檢舉
其實,大家的想法不重要,您的想法也不重要
重要的是您的上級是怎麼想的
也就是說
您的上級是我不要你覺得,我要我覺得
亦或是說
您覺得您的上級有納建言的雅量嗎?
joery iT邦新手 5 級 ‧ 2024-08-01 17:41:54 檢舉
你上面的意思應該是希望你有權控管理的概念及方式, 如上面樓層大大說
基本上都會設定不同"角色"而每個角色權限不同, 再去設定角色有那些"使用者"
授權基本上皆以"角色" 來授權,當然除了特別的也可以用個別"使用者"授權(但不好管理)
應分層二個面向:
(1) DB :
對DB存取角色
(i) DBA 、 DBOwner..... 到..... 各至系統
(ii) SchemaOwner --> 給有權限管理 Schema /Table 異動的人使用, ex: SA/SD
(iii) 其餘像開發人員建多個(一人一個 or 共用一個 DevUser 皆可, 看單位有沒有需要知道操作時是誰, Dev 的權限儘能 CRUD, 不能去Alter Table 之類)
(iv) 另外, 給系統用的帳號, 通常也會另外開, ex WebUser01 , Web{APName}, 是否多個看系統, 通常系統不太需要去異動Schema , 大部份也只會對於資料異動, 所以也只會給足CRUD 權限即可, 但也有程式例外, 那程式另外帳號或是同一個有權限的帳號

(2) 您的應用程式系統
一般我們會有不同的"角色Role" ,而不同的角色的權限當然也不同,會對應上述DB角色/帳號的(iv) 系統帳號部份

以上都需要觀看需求去設定 可以簡單也可以複雜.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
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的狀況下應該是不用擔心這個。

SunM0on iT邦新手 4 級 ‧ 2024-07-19 17:40:16 檢舉

froce 有SQLi基本上就能把整個DB包走,是不是同張表其實沒有關係,多掃一下而已,他主管的顧慮確實是沒有意義,這種其實就是懂一點但不多的長官會有的顧慮

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 功能,但是應用上還是視為一張表?

onlycool iT邦新手 5 級 ‧ 2024-08-21 14:08:29 檢舉

樓主這回覆87%像
韓國瑜:我談的是大海,你跟我講漱口杯?

7
Ray
iT邦大神 1 級 ‧ 2024-07-19 17:35:38

要談資安, 應該先盤點:你的利害關係人有哪些?
而不是一下就跳到資料庫要用甚麼表去...例如:

為什麼? 因為資安是花錢的事情, 他帶來的拖累通常大於效益;
如果這是連利害關係人都不關心的事情, 你就不需要花成本去處理他.

對員工而言:
你有沒有獨立隔離的前後台? 他完全不關心, 只要速度快好用就好

對主管機關而言:
你有沒有獨立隔離的前後台? 影響的是:
萬一出事情的話, 他對你施以行政罰的力度要多大?

有獨立前後台的被害(駭)廠商, 你可以辯解:

我真的很用心在關注資安! 前後台都投入了很多的時間與人力, 把他們獨立隔開了, 就是為了在萬一出事的時候, 能夠將受到影響的範圍縮到最小, 這些措施, 足以證明我們不但非常重視資安, 而且也採取了更嚴謹的態度, 來設計整體架構; 雖然不幸, 我們仍然遭到入侵, 但我們事前已經盡到最大努力來防止!....

沒有獨立前後台的被害(駭)廠商, 你只能辯解:

........反正被駭了也都是全部被拿走啊? 我們覺得這樣比較方便, 所以就放在一起...

資安事件民事賠償, 在法院的裁定是很吃心證的 (因為客觀證據幾乎很難取得或保存, 即便有, 也很難被法官客觀評價), 你覺得上面哪一種講法, 會讓法官形成對你有利的心證?

SunM0on iT邦新手 4 級 ‧ 2024-07-19 17:46:47 檢舉

很好的一個觀點,從整個企業的角度來看確實如此,並不需要了解這件事本身到底有沒有帶來更加安全的系統,或許需要攻克的技術面來說 有沒有分開是差不多的,但只要絕大多數人/大眾認為這麼做更加安全就足夠了

h3786010 iT邦新手 5 級 ‧ 2024-07-26 08:33:20 檢舉

很務實的觀點,受教了

0
海綿寶寶
iT邦大神 1 級 ‧ 2024-07-21 10:34:38

members和admin拆不拆分「資料表」其實沒有太大差別
真要拆的話
就拆成在經由不同防火牆、不同網段的兩部不同的伺服器(資料庫)上面
這樣更為安全

其實更為重要的是
你的「訂單資料」在那一台伺服器上面?
與其在乎member/admin帳號
應該先確保訂單資料的安全性吧?

帳號被駭大不了全部作廢重建
訂單資料被駭就大件事了/images/emoticon/emoticon06.gif

0
sam0407
iT邦大師 1 級 ‧ 2024-07-22 10:00:35

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

以程式技術來說確實沒有那麼必要,但以資訊安全來說分開是會好一些,因為以後您們可以視資安需求將後台管理者的Table移到另一台安全性更高的獨立DB,彈性大一些。

我能理解您主管的想法,相信他應該沒必要也不想跟您吵這些問題,因為工程師可以不管業務面,金主,案主什麼的,他卻不能不管,互相理解一下。

在職場相遇就是緣份(當然不一定是好的緣份,我們會稱之為逆增上緣),主管若有特別提出需求就作吧,反正工程師加班是常態,多這個需求也不過是多加幾個小時班,畢竟整個案子的成敗他要負責的~~這次您幫他,下次他幫您,多麼和諧快樂的工作環境呀~~

看更多先前的回應...收起先前的回應...
ronrun iT邦新手 4 級 ‧ 2024-07-30 00:53:39 檢舉

我是接案公司。規模也不大,全部的案件都是一個DB。

sam0407 iT邦大師 1 級 ‧ 2024-07-30 09:10:36 檢舉

接案公司那就肯定是照客戶金主說的作呀,別管合不合理,不然驗收不了誰來負責?

ronrun iT邦新手 4 級 ‧ 2024-08-02 02:04:13 檢舉

沒有客戶提過。他們只管使用操作上的需求,從來沒有客戶要求資料表怎麼拆分。

sam0407 iT邦大師 1 級 ‧ 2024-08-02 09:09:32 檢舉

那您思考一下,要如何和您的主管溝通?正面剛說你行你上是最笨的,直接講技術/架構的應該也沒用,我遇過最高段的溝通是能把主管忽悠到認為這個Idea是主管自己想出來的!

這種規劃沒有什麼對錯,每個人看的面象不同而已。向上管理作好,以後您會輕鬆很多。

0
onlycool
iT邦新手 5 級 ‧ 2024-08-21 13:08:40

是沒人懂laravel ,還是沒人懂你寫的laravel /images/emoticon/emoticon70.gif

要你做啥你就做啥,不爽幹掉他升主管自己去溝通阿
還是分個表都不會做?
這種東西也要上來問

我要發表回答

立即登入回答