2013-03-05 2 views
0

Я пытаюсь создать таблицу для пользователей и их разрешения. Как я это сделал, я создал таблицу под названием «Пользователи», и эта таблица имеет следующие поля:Права пользователя в SQL

UserID: Идентичность каждого пользователя. Пароль: пароль, который пользователь подписывает. Разрешение: состоит из:

Если разрешение, предоставленное пользователю, равно 1001, пользователь может просматривать данные (экран появится с двумя вариантами: первый вариант - просмотр данных текущих проектов , второй вариант - просмотр данных прошлых проектов). , если разрешение, предоставленное пользователю, равно 1002, пользователь может вставлять и просматривать данные. , если разрешение, предоставленное пользователю, составляет 1003, пользователь может просматривать, вставлять и обновлять данные.

Через мой поиск о разрешениях в SQL я выяснил, что этот способ не является хорошим способом, другими словами, он не является профессиональным. Можете ли вы, ребята, дать мне свое мнение о том, что я сделал? ЕСЛИ вы думаете, что это не очень хороший способ, пожалуйста, предложите мне несколько профессиональных методов.

+0

вы можете использовать поразрядную маску разрешения, чтобы указать, какие функции пользователь может получить доступ, или можно использовать реляционную таблицу. – Raptor

+0

Обратите внимание, что вы не должны хранить пароли в текстовом формате. Вы должны хранить их как «соленый хеш» - Google, который за много информации. –

ответ

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 код может проверять отдельные разрешения без необходимости использовать битовую маску для выделения соответствующего бита и (хотя это не требуется по вашему вопросу), будет легко написать код для поиска в базе данных для пользователей с определенным разрешением.