Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Каждому пользователю свой набор доступных полей.  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
У меня есть форма ввода. Необходимо некоторым юзерам давать права редактировать только часть полей. Нужно учесть, что редактирование в данном случае подразумевает создание новой записи. Все записи порожденные(редактированные) от начальной ссылаются на запись в главнй таблице, поэтому с понимаем какая запись от какой отредактирована не возникает.

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

Итак, вопрос. Как мне узнать системные идентификаторы столбцов из моих таблиц? Про существование системных таблиц sysobjects и syscolumns я знаю, но как понять какое поле из моей таблицы, так как не вижу связи между ними.

Наверное, есть еще вариант с использованием системы безопасности бд, но я не знаю как это делать, если кто-то расскажет и про этот вариант, то буду премного благодарен.И главный вопрос: а может я, вообще, все неправильно придумал?
24 апр 03, 16:43    [183716]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Необходимо некоторым юзерам давать права редактировать только часть полей.

Я бы сделал это по другому в триггере. Создал бы соответствующие роли. А в триггере проверял бы, если пользователь входит в такую роль (которой запрещено редактировать конкретное поле) и он поменял поле, которое не имеет право менять, то откат и соответствующее сообщение. А при твоем подходе, придеться строить динамические запросы.
24 апр 03, 16:54    [183736]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
KonstN
Member

Откуда:
Сообщений: 1201
А не проще будет построить хрестоматийную систему безопасности на view?
24 апр 03, 17:08    [183757]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 KonstN

А не проще будет построить хрестоматийную систему безопасности на view?

А как можно с помощью view разграничить права на изменение отдельных полей, а не записей?
24 апр 03, 17:13    [183768]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
KonstN
Member

Откуда:
Сообщений: 1201
2 pkarklin
таблица employee(id, name, birthdate, salary)
вьюшка employee_to_all = select id, name, birthdate from employee
вьюшка employee_to_manager = select id, name, birthdate, salary from employee
24 апр 03, 17:23    [183793]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 KonstN
вьюшка employee_to_all = select id, name, birthdate from employee
вьюшка employee_to_manager = select id, name, birthdate, salary from employee


Вот, вот. Одной вьшкой тут не обойдешься. Кроме того, ты ограничил и выборку, а автор говорил про редактирование. Да из твоих бы 2х вьюшек я б сделал одну.

SELECT

id,
name,
birthday,
CASE WHEN IS_MEMBER('Managers') = 1 THEN salary END
...


А лучше все это на хп реализовывать.
24 апр 03, 17:33    [183805]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
KonstN
Member

Откуда:
Сообщений: 1201
2 pkarklin
А я разве говорил про одну вьюшку?
Вьюшек будет приблизительно по количеству ролей, и права будут накладываться на вьюшки, а базовая таблица закрыта от всех.
И почему я ограничил редактирование?
24 апр 03, 18:06    [183860]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 KonstN

Вьюшек будет приблизительно по количеству ролей, и права будут накладываться на вьюшки, а базовая таблица закрыта от всех.

А клиента как прикажите писать. Динамически запросы строить?

И почему я ограничил редактирование?

Я сказал, что ты ограничил выборку, а автор хотел ограничить редактирование.
24 апр 03, 18:17    [183876]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
Genady
Member

Откуда: Москва
Сообщений: 2005
1 pkarklin
C Case-ами намучаешься не меньше чем, со множеством вьюх.
Ваш вариант c триггерами не пройдет в том случае, если их не только редактировать нельзя, но и читать.
24 апр 03, 18:18    [183877]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
Genady
Member

Откуда: Москва
Сообщений: 2005
2 Yola
Стоит просто все хорошенько обудмать и использовать в сочетании вьюхи, ХП, роли, может быть сервер приложений (если есть) и т.п.
А вобще pkarklin прав насчет ХП, я вообще сторонник обращения к таблицам только через ХП, а уж там можно продумать кому давать права на их выполнение, юзерам или ролям (ролям на мой взгляд опять же предпочтительнее, чем юзерам).
24 апр 03, 18:24    [183885]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
KonstN
Member

Откуда:
Сообщений: 1201
2 pkarklin
Это я просто пример привёл.
Ну а с редактированием - раздача прав на поля вьюх.
А зачем динамически запросы? Запросы висят на вьюхах.
24 апр 03, 18:27    [183894]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 Genady

Ваш вариант c триггерами не пройдет в том случае, если их не только редактировать нельзя, но и читать.

В триггерах я пресекаю на корню возможность изменения полей, для которых у соотвествующей роли нет прав на редактирование. Хотя это можно сделать и в хп на изменение записей в таблице. Вот в триггере или в хп, тут можно подумать. А выборку надо делать через хп с запросом, предложенным мной для вьюхи.
24 апр 03, 18:28    [183895]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 KonstN

А зачем динамически запросы? Запросы висят на вьюхах

Погоди, что значит запросы на вьюхах. Есть клиентская форма, назовем ее Персонал, в которой в грид выводятся записи из таблицы Employeers, но в зависимости от членства пользователя в роли, надо обращаться или к одной или к другой вьюхе. Ты где это, на клиенте будешь делать. Менять вьюху во FROM. Мож я не правильно выразился про динамические запросы в данном контексте.
24 апр 03, 18:31    [183901]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
KonstN
Member

Откуда:
Сообщений: 1201
2 pkarklin
Ну это если тупой грид, как в Access.
Но обычно ведь делаются формочки (табличные для показа или одиночные для ввода). Если они "статические", то и запросы к ним можно привязать статические.
24 апр 03, 18:35    [183906]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 KonstN

Ну это если тупой грид, как в Access.
Но обычно ведь делаются формочки (табличные для показа или одиночные для ввода). Если они "статические", то и запросы к ним можно привязать статические.


Какая разница, ты что, будешь для каждого пользователя свою формочку создавать с разным числов контролов, чтоб статически зашить запросы в клиента на рызные вьюхи. Форма для работы с личной карточкой должна быть одна, но в зависимости от прав пользователя в ней может что-то отображаться, а что-то нет. Точно так же и с редактированием. Более того, можно обратиться к серверу, проверить членство пользователя в роли, и сделать поля, которые он не может редактировать Enabled := False. Чтоб и соблазна не было.
24 апр 03, 18:42    [183917]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
Pavel
Member

Откуда: Кемерово
Сообщений: 2435
Опять, блин, на Ассess наезжают!
24 апр 03, 18:43    [183920]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
KonstN
Member

Откуда:
Сообщений: 1201
2 pkarklin
Всё правильно, но если сделать доступ через вьюхи с правами (или через хп), то отслеживать кто может писать, а кто нет будет сервер, руководствуясь своей security.

2 Pavel
нисколько - тупой значит простой, без колокольчиков.
24 апр 03, 18:57    [183942]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 KonstN

Всё правильно, но если сделать доступ через вьюхи с правами (или через хп), то отслеживать кто может писать, а кто нет будет сервер, руководствуясь своей security.

Ты так и несказал, как будешь писать клиента с множеством вьюх. А встроенной security сервера не всегда хватает, точнее, не всегда она подходит. В данном случаи, тот самый случай, IMHO
24 апр 03, 19:02    [183947]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
Рад, что мой топик вызвал такой интерес.

Одно маленькое дополнение.

Я ЖЕ СПРРОСИЛ
Я думаю создать таблицу пользователей и таблицу с наборами полей которые может редактировать пользоваль, потом в сторед прок проверять, все ли по честному. 


Итак, вопрос. Как мне узнать системные идентификаторы столбцов из моих таблиц? Про существование системных таблиц sysobjects и syscolumns я знаю, но как понять какое поле из моей таблицы, так как не вижу связи между ними.


Кроме того прошу обратить внимание на то, что редактирование на самом деле в данном случае подразумевает добавление новой записий, как бы порожденной от изначальной. И каждый новый пользователь видит последнюю отредактированную.
25 апр 03, 10:02    [184195]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Итак, вопрос. Как мне узнать системные идентификаторы столбцов из моих таблиц? Про существование системных таблиц sysobjects и syscolumns я знаю, но как понять какое поле из моей таблицы, так как не вижу связи между ними.

А про SELECT * FROM INFORMATION_SCHEMA.COLUMNS вы тоже знаете ?
А про функцию PERMISSIONS () ?

И еще одни вопрос - уверены ли вы что вам нужна именно своя система прав доступа к таблицам ?Может быть все-таки сначала попытаться использовать систему прав доступа самого sql сервера ?
25 апр 03, 10:17    [184224]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
KonstN
Member

Откуда:
Сообщений: 1201
Glory: Может быть все-таки сначала попытаться использовать систему прав доступа самого sql сервера ?
Именно это я и пытался предложить.
2 pkarklin
а почему не подходит встроенная секьюрити в данном случае?
всё зависит от того как схему данных построить - если всё в одной таблице держать (как в двоичной базе), то не хватит, конечно (а может и хватит - не задумывался, честно говоря - может всё равно вьюх можно понастроить над полями типов+хозяин), а если построить каноническую схему, то всего хватает.
25 апр 03, 10:57    [184311]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 KonstN

Да можно и встроенную использовать. Для запрещение редактирования части полей это подойдет. Запрещаем нужным пользователям редактирвать некоторые поля с помошью DENY. Так что вчера может я немного и накрутил. Так как ориентировался еще и на ограничение выборки.

2 Yola.

Тут действительно можно обойтись встроенным механизмом разграничения прав доступа на уровне полей.
25 апр 03, 11:08    [184332]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
KonstN
Member

Откуда:
Сообщений: 1201
2 pkarklin
Дык ограничение выборки и делаем при помощи view - селекция+проекция -> получаем нужную выборку, а там уж накладывай на поля ограничения.
Ну и плюс WITH CHECK OPTION.
:beer:! ;-)
25 апр 03, 11:12    [184340]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 KonstN

Да не использую я view, тока через хп работаю. А там в запросе перечень полей не меняется, я тока показываю или не показываю значения, ориентируясь на членство в группе. Хотя можно было и на право SELECT столбца ориентироваться через PERMISSIONS(), как правильно заметил Glory.
25 апр 03, 11:17    [184356]     Ответить | Цитировать Сообщить модератору
 Re: Каждому пользователю свой набор доступных полей.  [new]
Yola
Member

Откуда: Ukrainia
Сообщений: 615
Из INFORMATION_SCHEMA.COLUMNS я не могу получить список ид колонок для конкретной тоблицы:( Там только имена.
25 апр 03, 12:20    [184473]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить