Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Права на записи в таблице.
|
|||
|---|---|---|---|
|
#18+
Кто-нибудь может подсказать, как организовать такую вещь: предположим есть таблица (одна) объектов. В ней 3 поля - артикул, наименование и тип. Тип - 1, 2, 3. У базы 2 юзера. Одному надо дать доступ на тип 1, а второму на 2 и 3. То есть например, если юзер 1 делает запрос select * from [Таблица], то ему выдаютчся только записи с типом 1. Второму - соответственно. Подскажите пожалуйста, как организовать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2001, 10:25 |
|
||
|
Права на записи в таблице.
|
|||
|---|---|---|---|
|
#18+
IMHO можно - создать 3 view-а, в каждом из которых SELECT .... WHERE [Тип] = 1 , 2 или 3 соответсвенно и дать права пользователям не на таблицу, а на соответсвующий view. - если логика клиентского приложения позволяет, то создать процедуру сервера, которая по имени пользователя возвращает соответствующий набор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2001, 14:20 |
|
||
|
Права на записи в таблице.
|
|||
|---|---|---|---|
|
#18+
альтернативный вариант то же самое можно сделать не использую процедуру, а сделав поле через CASE, в зависимости от имени юзера: SELECT CASE WHEN условие1 then field1 WHEN условие2 then field2 END as result_field1, CASE WHEN условие1 then null WHEN условие2 then field3 END as result_field2 from ... --здесь должны быть соответствующие системные таблички ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2001, 07:09 |
|
||
|
Права на записи в таблице.
|
|||
|---|---|---|---|
|
#18+
Объединив предложения Glory и SergeK можно сделать такой View: CREATE VIEW UserView AS SELECT * FROM [Таблица] WHERE CASE WHEN suser_sname() = 'User1' AND [Тип] = 1 THEN 1 CASE WHEN suser_sname() = 'User2' AND [Тип] IN (2,3) THEN 1 ELSE 0 END = 1 GO и запрашивать данные SELECT * FROM UserView А ещё лучше создать доп. таблицу с 2 полями [User] и [Тип], тогда CREATE VIEW UserView AS SELECT * FROM [Таблица] WHERE [Тип] IN (SELECT [Тип] FROM [ДопТаблица] WHERE [User] = suser_sname()) GO В этом случае можно менять области видимости пользователей через ДопТаблица, а не меняя VIEW. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2001, 08:27 |
|
||
|
Права на записи в таблице.
|
|||
|---|---|---|---|
|
#18+
Лучше использовать систему безопасности сервера, т.е. давать доступ на представления или процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2001, 08:46 |
|
||
|
Права на записи в таблице.
|
|||
|---|---|---|---|
|
#18+
То есть, как я понял. Нужно убрать права на select у таблицы, и сделать вью или процедуру, на которую у юзера права будут. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 14:59 |
|
||
|
Права на записи в таблице.
|
|||
|---|---|---|---|
|
#18+
Конечно лучше всего убрать права на SELECT, INSERT, UPDATE и DELETE сделать соответсвующую вью и процедуры, которые будут проверять права может ли пользователь делать тото или тото, естественно нужно будут сделать таблицу где будут указаны права конкретных пользователей. Вообщем всё зависит от твоей фантазии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 15:15 |
|
||
|
Права на записи в таблице.
|
|||
|---|---|---|---|
|
#18+
Так. Только если убрать право на SELECT у таблицы и оставить право на SELECT у VIEW, то запрос не будет работать. Будет выдавать ошибку, что прав на SELECT не хватает (можете проверить сами, я точно не помню, давно это делал). Причина в том, что VIEW - это всего лишь хранимый запрос, и не более того. Когда пользователь посылает SELECT к view, то SQL Server автоматически генерит новый запрос к исходной таблице на основе текста VIEW и запроса пользователя. И если прав на таблицу нет, то будет ошибка. То же самое будет, если использовать не VIEW, а хранимую процедуру. Дать право на EXECUTE недостаточно, нужно будет дать право на SELECT исходной таблицы. Впрочем, проверьте всё это сами, это делается легко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 15:17 |
|
||
|
Права на записи в таблице.
|
|||
|---|---|---|---|
|
#18+
Правильно поняли. Тогда на запрос select * from [Таблица] пользоваетелям будет выдаваться ошибка об остуствии соответсвующих прав и они смогут делать select только из доступного им view-a, в которм уже накладывается ограничение PS IMHO лучше разрешать доступ к объектам не отдельным пользователям, а ролям. Тогда включением(исключением)пользоваетля в соответсвующую группу можно давать(отбирать) ему права без перебора всех объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2001, 15:18 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32017203&tid=1824918]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 340ms |

| 0 / 0 |
