Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Уважаемые Гуру, у меня куча вопросов... Попробую описать ситуацию на простых примерах, на которых и тестирую свою задумку...
Пример взял из BOL про триггеры INSTEAD OF.

Таблица с данными:
ID Color Material ComputedCol User_id
ID записи Цвет Материал вычисляемое поле(цвет+материал) User_id()

Поле(функцию) User_id добавил сам для определения id пользователя, внесшего запись.

Бинарная таблица с правами:
User_id Group_id Chtenie Zapis
User_id() номер группы права на чтение права на запись

Последние два поля - чисто "для себя", так как права на запись и/или чтение выставляю для каждого конкретного пользователя в SQL Management Studio.

Селект вьюхи(InsteadView):
+
SELECT     dbo.BaseTable.ID, dbo.BaseTable.Color, dbo.BaseTable.Material, dbo.BaseTable.ComputedCol, dbo.BaseTable.User_id AS User_id1, 
                      dbo.Rights.User_id AS User_id2, dbo.Rights.Group_id, dbo.Rights.Chtenie, dbo.Rights.Zapis
FROM         dbo.BaseTable INNER JOIN
                      dbo.Rights ON dbo.BaseTable.User_id = dbo.Rights.User_id
WHERE     (dbo.Rights.User_id = USER_ID()) OR
                      (dbo.Rights.Group_id = CASE WHEN USER_ID() = '6' THEN 3333444 ELSE 0 END)

Т.е. подключился пользователь и увидел только свои внесенные записи, если подключился пользователь с ID равным "6", он увидел всю группу. Права для него раздам уже в самом SQL. Либо только чтение всей группы, либо чтение и редактирование всей группы.

Теперь вопросы:))
1) Правильно ли я все сделал?
2) Есть ли ошибки или пожелания?
3) Как правильно написать триггеры для данной вью на удаление, вставку и обновление?

При создании триггера:
+
CREATE TRIGGER InsteadTrigger on InsteadView
INSTEAD OF INSERT
AS
BEGIN
  --Build an INSERT statement ignoring inserted.ID and 
  --inserted.ComputedCol.
  INSERT INTO BaseTable
       SELECT Color, Material
       FROM inserted
END;

Пишет: Сообщение 213, уровень 16, состояние 1, процедура InsteadTrigger, строка 7
Имя столбца или число предоставленных значений не соответствует определению таблицы.


4) Нужен ли он(триггер) вообще, если я вношу все данные через формы Access через соединение ODBС??

В "боевых" таблицах будут поля Varchar, Bit, Int и, возможно, Blob. Будет много подчиненных таблиц и справочников.
Заранее благодарю за помощь!
З.Ы. Прошу отнестись с пониманием, данным вопросом занялся относительно недавно. Триггеры никогда не приходилось писать...
17 авг 14, 21:11    [16452862]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
Glory
Member

Откуда:
Сообщений: 104760
eric555
Пишет: Сообщение 213, уровень 16, состояние 1, процедура InsteadTrigger, строка 7
Имя столбца или число предоставленных значений не соответствует определению таблицы.

И что непонято из этого сообщения ?

eric555
4) Нужен ли он(триггер) вообще, если я вношу все данные через формы Access через соединение ODBС??

А ваш Access сможет сам разобраться, в какую именно таблицу нужно добавлять данные
У вас же в запросе 2 таблицы
18 авг 14, 10:37    [16454424]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Glory
И что непонято из этого сообщения ?

Эмм... смысл не понятен.
Glory
А ваш Access сможет сам разобраться, в какую именно таблицу нужно добавлять данные

Вот именно, что он сам разбирается и записывает без триггера.
18 авг 14, 17:31    [16457989]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
Glory
Member

Откуда:
Сообщений: 104760
eric555
Glory
И что непонято из этого сообщения ?

Эмм... смысл не понятен.

"Имя столбца или число предоставленных значений не соответствует определению таблицы."
Вы думаете, что сервер сам должен угадать, какие значения в какие поля нужно добавлять ?

eric555
Вот именно, что он сам разбирается и записывает без триггера.

Сразу в две таблицы ?
18 авг 14, 17:35    [16458013]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Glory
Вы думаете, что сервер сам должен угадать, какие значения в какие поля нужно добавлять ?

Ладно, сам разберусь!
Glory
Сразу в две таблицы ?

Нет, в одну. Во вью отображены все поля. Я оставлю для отображения и внесения данных только 2 поля из основной таблицы: "Color" и "Material".
18 авг 14, 17:44    [16458088]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
Glory
Member

Откуда:
Сообщений: 104760
eric555
Ладно, сам разберусь!

Начните с чтения синтаксиса команды INSERT

eric555
Нет, в одну. Во вью отображены все поля. Я оставлю для отображения и внесения данных только 2 поля из основной таблицы: "Color" и "Material".

И откуда возьмутся значения для остальных полей ?
18 авг 14, 17:46    [16458098]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
Konst_One
Member

Откуда:
Сообщений: 11562
 INSERT INTO BaseTable ([имя поля 1], [имя поля 2])
       SELECT Color, Material
       FROM inserted



странный триггер у вас, может проверку надо добавить на вставку одинаковых значений , например
18 авг 14, 17:48    [16458113]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Glory
И откуда возьмутся значения для остальных полей ?

Селект вьюшки внимательно посмотрите, поймете смысл остальных полей.
18 авг 14, 19:42    [16458674]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Konst_One,

Спасибо за подсказку! Буду пробовать дальше...
Konst_One
странный триггер у вас, может проверку надо добавить на вставку одинаковых значений , например

eric555
Пример взял из BOL про триггеры INSTEAD OF.
18 авг 14, 19:44    [16458685]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
eric555
Glory
И откуда возьмутся значения для остальных полей ?

Селект вьюшки внимательно посмотрите, поймете смысл остальных полей.
Ну вот вы так серверу и скажите - "ты зачем мне тут непонятные сообщения об ошибке бросаешь? ты селеки вьюшки внимательно посмотри, и все поймешь". И все будет ок.
18 авг 14, 19:45    [16458691]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Гавриленко Сергей Алексеевич,

Ну так укажите мне на ошибку!

Я открываю вью в access'е и прямо вписываю значения. Он принимает, все отлично вставляется. Я потому и спрашиваю. Как триггер работает, нужен ли он? Если бы из BOL все было понятно, я бы не стал сюда ничего писать!
18 авг 14, 19:50    [16458705]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
Glory
Member

Откуда:
Сообщений: 104760
eric555
Как триггер работает, нужен ли он?

Ну подумайте сами, если у вас access "Он принимает, все отлично вставляется. " и не вызывает срабатываение триггера, то нужне вам триггер или нет

А если вам нужно, чтобы триггер срабатывал, то зачем тогда access "Он принимает, все отлично вставляется. "
18 авг 14, 20:12    [16458766]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
Glory,

Очень хорошо объясняете, все предельно понятно! Ощущается польза от форума и от профессионалов.
18 авг 14, 21:47    [16459066]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
eric555
Ощущается польза от форума и от профессионалов.
Правда очень удобно задать профессионалам вопрос и ждать пока они все разжуют, а самому заниматься более интересными делами?
Если бы вы потрудились полность прочитать статью документации по CREATE VIEW, то узнали бы об опции VIEW_METADATA, зачем она нужна и как влияет на обновляемость представлений.
18 авг 14, 22:02    [16459145]     Ответить | Цитировать Сообщить модератору
 Re: Разграничение прав по записям пользователей и написание триггера INSTEAD OF  [new]
eric555
Member

Откуда: Москва
Сообщений: 397
invm
то узнали бы об опции VIEW_METADATA

А я о ней и не знал. Теперь узнал!
18 авг 14, 22:08    [16459178]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить