2013-03-05 60 views
0

我正在嘗試爲用戶及其權限創建表。我的做法是創建一個名爲Users的表,並且此表具有以下字段:SQL中的用戶權限

UserID:每個用戶的標識。 密碼:用戶簽名​​的密碼。 權限:這包括以下內容:

如果授予用戶的權限爲1001,用戶可以查看數據(屏幕將出現兩個選項:第一個選項是查看當前項目的數據,第二個選項是查看過去項目的數據)。 如果授予用戶的權限爲1002,則用戶可以插入和查看數據。 如果授予用戶的權限爲1003,則用戶可以查看,插入和更新數據。

通過在SQL中搜索權限,我發現這種方式不是一種好方法,換句話說它不是專業。你能請人給我你對我所做的事的看法嗎?如果你認爲這不是一個好方法,請給我建議一些專業方法。

+0

您可以使用按位權限掩碼來指定用戶可以訪問哪些函數,或者可以使用關係表。 – Raptor 2013-03-05 10:01:30

+0

請注意,您不應該以純文本格式存儲密碼。你應該將它們存儲爲一個「鹽醃散列」 - Google提供大量信息。 – 2013-03-05 10:03:52

回答

0

我會用不同的方法。

添加另一個表稱爲權限

CREATE TABLE Permissions 
(
    PermissionID int Not null 
    Description nvarchar(255) NOT NULL 
) 
CONSTRAINT [PK_permissions] PRIMARY KEY CLUSTERED 
(
[PermissionID] ASC 
) ON [PRIMARY] 

而另一位叫UserPermissions

CREATE TABLE UserPermissions 
(
    UserID int Not Null 
    PermissionID int Not null 
) 
CONSTRAINT [PK_user_permissions] PRIMARY KEY CLUSTERED 
(
     [UserID]ASC, 
[PermissionID] ASC 
) ON [PRIMARY] 

這樣每個權限有一個正確的記錄,你會得到允許特定用戶與查詢權限/像這樣的存儲過程

SELECT u.UserID, p.PermissionID, p.Description 
FROM Users u INNER JOIN UserPermission up on up.UserID = u.UserID 
    INNER JOIN Permissions p on up.PermissionID = p.PermissionID 

這樣你r代碼可以檢查個人權限而無需使用位掩碼來隔離適當的位和(雖然不是您的問題所要求的),但編寫代碼可以輕鬆地搜索您的數據庫以獲得具有特定權限的用戶