none
Разграничение прав доступа RRS feed

  • Вопрос

  • Добрый день.

    В базе имеются следующие таблицы:

    Counter (CounterID, PlaceID, CounterModel, CounterNote);

    Testimony (TesID, TimeDate, CounterID, CounterData);

    Location (PlaceID, PlaceName).

    Необходимо разграничить доступ пользователей по атрибуту PlaceID. Например, пользователь №1 должен иметь доступ только к тем записям таблицы Location, где PlaceID = 1, таблицы Counter, где PlaceID = 1, и таблице Testimony , где CounterID соответствует PlaceID = 1 в таблице Counter.

    Как это реализовать, с помощью ролей базы данных или приложения? Может быть, какой-то третий вариант?


    С уважением, J.Lion

Ответы

  • Добрый день.

    Для всех этих таблиц надо написать хранимые процедуры для выборки. Они будут получать Id пользователя. внутри хранимки, по Id пользователя выбирайте его PlaceId.

    Ну и когда быдет выполнятся основной запрос будете добавлять к ним проверку PlaceId. Например, выбор всех территорий доступных пользователю может иметь вид:

    CREATE PROCEDURE SelTerrritoryes 
    	@UserId int
    AS
    BEGIN
    	declare @PlaceId int
    	set @PlaceId = (select top 1 PlaceId from Users where Id = @UserId)
    	select * from Territoryes where PlaceId = @PlaceId
    END

    • Помечено в качестве ответа J.Lion 6 июня 2012 г. 7:08
    Отвечающий

Все ответы

  • Добрый день.

    Для всех этих таблиц надо написать хранимые процедуры для выборки. Они будут получать Id пользователя. внутри хранимки, по Id пользователя выбирайте его PlaceId.

    Ну и когда быдет выполнятся основной запрос будете добавлять к ним проверку PlaceId. Например, выбор всех территорий доступных пользователю может иметь вид:

    CREATE PROCEDURE SelTerrritoryes 
    	@UserId int
    AS
    BEGIN
    	declare @PlaceId int
    	set @PlaceId = (select top 1 PlaceId from Users where Id = @UserId)
    	select * from Territoryes where PlaceId = @PlaceId
    END

    • Помечено в качестве ответа J.Lion 6 июня 2012 г. 7:08
    Отвечающий
  • Если я правильно понимаю, нужно создать следующую таблицу:

    Users (ID, PlaceID)?

    Благодарю, Алексей. Сейчас попробую


    С уважением, J.Lion