iT邦幫忙

0

關於mssql資料庫使用者最小權限設定的問題

  • 分享至 

  • xImage

各位前輩們好,我目前有一個購票網站
架構大概是每建立一個新的購票活動,就會在資料庫建立一個專屬該活動的新資料庫
並且對每個活動的資料庫,都會建立一個只能存取該資料庫的login和user
然後另外有一個存放目前共有哪些活動的資料庫
在開發的過程中為了方便,應用程式都是使用一個有Sysadmin角色的帳號開發
現在想要調整這個帳號的權限,讓其不要有那麼大的權限,但碰到幾個問題

1.因為該帳號需要能夠新建資料庫與新增使用者,建資料庫這部分能夠另外給權限沒問題
但建立使用者的權限好像不能單獨給予,只能夠隨著Securityadmin角色給予
而這個角色權限基本和Sysadmin差不多大
想請問是不是從架構上,就不應該規劃成讓應用程式能夠建立資料庫的login?

2.目前該最大權限的帳號是放在一個config檔案內,隨server啟動載入
想請問這樣是否會有安全性問題?
需要將帶有Sysadmin寫在code內,再另外建立一個沒有那麼大權限的帳號來存取共用資料庫嗎?

3.這個跟權限比較沒關係
每次新建資料庫時,裡面都有一些預設的資料表
目前是只要建立新資料庫時,就會從一個bak檔案還原成資料庫並改名
想請問這種作法有沒有甚麼問題,如果是使用產生指令碼的方式來建立會比較好嗎?

以上問題想請問各位前輩們的意見,謝謝

Hey iT邦新手 3 級 ‧ 2024-04-17 09:23:24 檢舉
每個活動有獨立資料庫, 這個設計應該不太常見, 己經去到雲應用, 像AWS之類的做法. 我覺得可以考慮不用這樣分割.

寫在code 與寫在config 其實分別不太, 問題是設計上要開獨立資料庫才需要這個大權限帳號, 如果不用這設計, 那就無需將大權限帳號放出來, 保安上較好
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
pilipala
iT邦新手 2 級 ‧ 2024-04-17 15:02:35
最佳解答

Store Peocedure 中的 EXECUTE AS 可以指定有權限使用者來進行新增使用者行為,AP 端只要呼叫該 Store Procedure 就好,可以參考該 範例

ufv23 iT邦新手 5 級 ‧ 2024-04-18 08:50:29 檢舉

謝謝提供,我嘗試看看。

0
海綿寶寶
iT邦大神 1 級 ‧ 2024-04-16 23:36:43

我就問
1.如果我在五場活動都有購票
我要註冊幾組帳號密碼
系統要替我建立幾組sqlserver的login
2.萬一在第五場活動發現有欄位長度不夠需要修改
你會修改另外四場活動的資料庫嗎?

看更多先前的回應...收起先前的回應...
ufv23 iT邦新手 5 級 ‧ 2024-04-17 08:12:08 檢舉

1.抱歉沒有說明清楚,我指的是建立活動的同時會建立專門給應用程式使用的login和user,所有對該新資料庫的存取都是透過新建立的login和user。不是指每一個使用者都要建一組login和user,所有的使用者都是用一樣的。
2.如果有需要的話會改。

1.抱歉沒有說明清楚,我指的是建立活動的同時會建立專門給應用程式使用的login和user,所有對該新資料庫的存取都是透過新建立的login和user。不是指每一個使用者都要建一組login和user,所有的使用者都是用一樣的。

如果有500個人購票
都共用同一個login和user....這我沒問題

我的問題是
總得建立500個「帳號」(e.g.身分證字號,會員編號)
系統才知道是誰來購票
我指的是這個

在你如此的設計
如果我參加5場購票
要建幾次帳號

ufv23 iT邦新手 5 級 ‧ 2024-04-18 08:06:25 檢舉

購票是一次性的,所以只有在購票時填入一次必要的資料,不需要把資料保存起來讓所有活動都能用。

不建立會員資料...算是比較少見的做法
只要客戶能接受就好

0
厚厚
iT邦新手 1 級 ‧ 2024-04-17 09:43:09

以這個架構來說,暫時沒有想到甚麼解決方法
因為先從一開始的規劃,由AP建立活動的專屬資料庫開始,就注定要提供很大權限給AP端了(開資料庫的權限)
這個方式沒有改變,應該很難有突破

再來後續連線個資料庫的帳密,是想到可以提供一個Securityadmin件的共用權限管理庫,裡面是存放活動專案所需的TABLE及相關帳密
這樣每個專案活動就能利用不同的DB login(不是USER login)去連線Connection了
其實就有點類似你user login的方式(你將每個專案的USER存在各自的資料庫TABLE供不同的專案活動利用),只是又拆分一個更上層的專案管理者LOGIN TABLE

我要發表回答

立即登入回答