全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3122
推到 Plurk!
推到 Facebook!

請教身份權限管理表格要如何設計

答題得分者是:boson
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-03-16 05:31:45 IP:61.219.xxx.xxx 訂閱
請教各位前輩:
小妹在試者自己寫一些小系統管自己的一些小東西,想為這個系統加個身份權限管制。我不曉得這個含密碼值及權限設定的表格要如何設計。我會將密碼值編碼加密後再存入表中。我要如何設計這個系統有那些權限?是作個Form的清單,再在身份權限主表的從表中記錄此人可否執行此Form的新增修改刪除的權限嗎?這樣作好像好奇怪?而且覺得好像很容易被人破解及毀壞。在這個記錄帳號、Form、add/Edit/Delete/Execute的Detail表格中勢必會變成一人N筆資料,這寫起來要如何寫?而且這些是否可以Add或Edit等的欄位是用True/False來記錄嗎?如是True/False那會好奇怪,而且要如何編密?如設成Char的是或否,那這麼短的字串又頻繁出現的字串編密後很容易被破解,即使不被破解,有心人只要開了這個Access再以覆製貼上就可任意改變此人某Form是否可執行某功能的設定了。我想了好久,覺得都不可行,不知前輩們是如何設計及處理這些問題的。謝謝指點。

kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-03-16 17:51:30 IP:61.231.xxx.xxx 訂閱
沒人寫成多表的Master-Detail啦,那是一般的資料處理才用的方式。
------
Kevin
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-03-19 07:34:24 IP:61.219.xxx.xxx 訂閱
因為Form會有很多個,如果不設成『user-主/Form權限記錄多筆-從』的方式,要如何作?小妹實在想不出來。我只是寫來好玩,沒設計過商務系統的經驗,這方面真沒什麼底子。想了好久好久,沒有頭緒,才鼓起勇氣來問問。
我是看過一本講到權限設定與管理的書,想來自己寫一個類似功能。想了好久,問題很多。
如果我的Form權限包括AccountName/FormName/CanAdd/CanEdit/CanExec,那User只要比對一下他自己的身份及權限,就可以開了Access用簡單的拷貝貼上﹝如果我將『是/否』編碼﹞﹝這麼短的字講到編碼保護,好像沒什麼用﹞就可以完全破解了。
不用主從多表要如何設計?百思不得其解。
JammyHsu
一般會員


發表:14
回覆:39
積分:10
註冊:2003-09-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-03-19 12:17:49 IP:140.128.xxx.xxx 訂閱
table struct list
name(10) password(10) rights(10)
jack ****** ######
mary ******** $$$$$$$

用代號代表每一項功能, 譬如:
0: 表示執行
1: 新增
2: 修改
3: 刪除
4: 列印
...(至少可以設到62種0-9, A-Z, a-z)
若jack可執行 新增 修改 列印, 那他的權限就是0124
若mary可執行 刪除 列印, 那他的權限就是034
以上代號存入table時再編碼就好啦, 不用一種權限建一個欄位
然後可以在執行程式時就判斷有哪些權限, 沒有的權限就把它disable
或者mary點add時, 再判斷有無權限, 沒有就顯示提示
不需用到兩個表格, 也沒什麼主從式的問題了
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-03-19 20:30:20 IP:218.170.xxx.xxx 訂閱
員工資料表 :
UserID
UserName
Password

權限資料表
UserID
FormName
Rights

1. 假設有 N 個 Form, 則每一位 User 在權限資料表中就會有 N 筆資料
2. Password 僅儲存密碼的 MD5 雜湊值, 我想這你應該知道
3. Rights 可如同上文提到的方法, 儲存權限值, 但需以 AES 編碼保護
例如, 假設某一個 Form 可讓此 User 進行 瀏覽與修改, 則 Rights 原始值可設為 'BE' (Browse, Edit),
但存入資料表時, 應將 'BE' 以某一個 Key 進行 AES 運算, 而 Key 又應與 UserID 及 FormName 相關,
簡單的做法, 可以用一個固定字串(如 'MyAesKey') 加上 UserID, 再加上 FormName 做為 Key,
例如 UserID 是 'A01', 而 FormName 是 'Form1', 則 Key 可以用 'MyAesKeyA01Form1' 字串,
這樣將 'BE' 與 'MyAesKeyA01Form1' 進行 AES 編碼得到的結果, 才實際存入資料表的 Rights 欄位
4. 要查核 User 權限時, 將 'MyAesKey' 加上 UserID 與 FormName 而得到 Key, 使用 Key 將 Rights 解碼, 即得真正的權限值,
如果 AES 解碼時, 出現錯誤, 表示有人動了手腳, 那就不允許進行任何動作

這樣的做法, 每個 Key 都不同, 只要試圖搞鬼的人不知道你的 Key 值是這樣來的, 就無法修改權限值,
基本上這個系統就算比較安全了
(Password 進行 MD5 運算時, 也應該以類似的方式加上一個固定字串, 以免被解碼
例如, 密碼是 '123', 則以 'MyHashKey123' 進行 MD5 運算, 得到的結果才存入 Password 欄位)

當然, 有法有破, 真要遇到高手, 可能還是可以從其他地方破解, 不過這又是另外一件事了

limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-03-21 06:11:39 IP:61.219.xxx.xxx 訂閱
謝謝前輩們的指點,銘感於內。
謝謝前輩把密碼實作講的如此深入透澈,小妹拜謝。
我這幾天在研讀Linux的密碼保護及找了幾本密碼學的書在苦讀中,及試實作前輩們指點的方向,頗有進益。謝謝了。

limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-03-21 06:14:22 IP:61.219.xxx.xxx 訂閱
我還有兩個問題。第一個是在我的AP中我要如何作MD5或AES的編碼?我現找到的幾本編碼書都是講原理,而沒講在Delphi-Code中如何下令編碼的。還請前輩們多多指點方向。謝謝。
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-03-21 06:15:36 IP:61.219.xxx.xxx 訂閱
另一個問題是:如果我要跨Form去作權限管制,那要如何作?
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-03-21 10:17:18 IP:220.130.xxx.xxx 訂閱
MD5跟AES問Google,連Source都有,
有沒有跨Form不重要,重要的是「被管理的物件」,在「被使用之前」,「必須取得授權」
既然你的管理資料都在DB中,那麼你就需要有一個授權的機制,
在每次物件或資源被使用前都去檢查現有帳號是否有權限使用
可以參考Windows的系統管理。
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-03-25 09:29:35 IP:61.219.xxx.xxx 訂閱
謝謝各位前輩的熱心指點,小妹受益良多。
我這幾天找了好幾本書在仔細研讀,包括WinServer2003/鳥哥新版的兩本私房菜,還買了幾本密碼學的經典書,仔細研讀。頗有進益。還有一位熱心的前輩提供了一套商務系統供我參考研習權限管制設計。
在此一問,勝讀十年。
這些比課本上講的要實務的很多。收益良多。
非常謝謝。
系統時間:2024-05-19 20:19:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!