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

Откуда:
Сообщений: 84
Уважаемые форумчане.
Порыл форум, но не нашел ответ на свой вопрос.
Есть таблица, Id, … , Creator (Creator заполняется функцией systrm_user).
Есть необходимость реализовать доступ к таблице по следующим правилам:
1.Только создатель может редактировать свои строки в таблице;
2.Есть дав общих поля Exec (bit), DateExec (Datetime) доступные всем пользователям.

Написал триггер на update, delete:
if exists(select * from deleted d 
  where lower(d.Creator)<>lower(right(SYSTEM_USER,len(d.Creator))))
	begin
		raiserror ('Вы не являетесь автором записи!', 16, 1)
		rollback transaction 
	end;


Триггер решает только первую часть задачи. Подскажите, есть у кого идеи как быть со второй?
22 июл 13, 14:13    [14599111]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
Вюшка, Функция???
22 июл 13, 14:17    [14599157]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
alex02
Member

Откуда:
Сообщений: 84
Не понял вопроса.
Данные лежат в таблице. Реализовать пытаюсь с помощью триггера.
22 июл 13, 14:21    [14599184]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
На селект нет тригера
22 июл 13, 14:22    [14599192]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
create view bla-bla (1....2)
as
select (1....2)
from aaaa
  where lower(aaaa.Creator)=lower(right(SYSTEM_USER,len(aaaa.Creator)))

И дать пользователь доступ на чтение только для вьюшки
22 июл 13, 14:25    [14599213]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
alex02
Member

Откуда:
Сообщений: 84
Это понятно. Мне нужно проапдейтить два поля от имени любого пользователя. А все остальное, кроме этих двух полей, чтобы мог редактировать только создатель.
22 июл 13, 14:26    [14599228]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
alex02
Member

Откуда:
Сообщений: 84
такой вювой я скрою чужие записи! а мне их апдейтить нужно по двум полям.
22 июл 13, 14:28    [14599243]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
alex02
Это понятно. Мне нужно проапдейтить два поля от имени любого пользователя. А все остальное, кроме этих двух полей, чтобы мог редактировать только создатель.

усе теперь понял
Дык сравнивайте таблицы тогда, там увидете что поменялось.
Есть же инсертед и делетед
22 июл 13, 14:38    [14599333]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
alex02
Member

Откуда:
Сообщений: 84
angel_zar если не затруднит, ткните в пример.
22 июл 13, 14:42    [14599360]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
alex02
angel_zar если не затруднит, ткните в пример.
IF EXISTS
(
 SELECT *
 FROM deleted d FULL JOIN inserted i ON d.Id=i.Id
 WHERE NOT EXISTS(SELECT i.F1,i.F2,...,Fn INTERSECT SELECT d.F1,d.F2,...,Fn)
)
PRINT 'В полях F1,F2,...,Fn что-то поменялось! :-)';
22 июл 13, 14:51    [14599428]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
alex02
Уважаемые форумчане.
1.Только создатель может редактировать свои строки в таблице;
2.Есть дав общих поля Exec (bit), DateExec (Datetime) доступные всем пользователям.


У вас пункт 2 противоречит пункту 1.
22 июл 13, 14:52    [14599433]     Ответить | Цитировать Сообщить модератору
 Re: Организация доступа к таблице  [new]
alex02
Member

Откуда:
Сообщений: 84
iap
alex02
angel_zar если не затруднит, ткните в пример.
IF EXISTS
(
 SELECT *
 FROM deleted d FULL JOIN inserted i ON d.Id=i.Id
 WHERE NOT EXISTS(SELECT i.F1,i.F2,...,Fn INTERSECT SELECT d.F1,d.F2,...,Fn)
)
PRINT 'В полях F1,F2,...,Fn что-то поменялось! :-)';


angel_zar и iap спасибо за идею и пример!
доработал триггер и получил то, что хотел.
22 июл 13, 16:47    [14600127]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить