powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Права на записи в таблице.
10 сообщений из 10, страница 1 из 1
Права на записи в таблице.
    #32017200
Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нибудь может подсказать, как организовать такую вещь: предположим есть таблица (одна) объектов. В ней 3 поля - артикул, наименование и тип. Тип - 1, 2, 3. У базы 2 юзера. Одному надо дать доступ на тип 1, а второму на 2 и 3. То есть например, если юзер 1 делает запрос select * from [Таблица], то ему выдаютчся только записи с типом 1. Второму - соответственно. Подскажите пожалуйста, как организовать...
...
Рейтинг: 0 / 0
Права на записи в таблице.
    #32017203
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO можно
- создать 3 view-а, в каждом из которых SELECT .... WHERE [Тип] = 1 , 2 или 3 соответсвенно и дать права пользователям не на таблицу, а на соответсвующий view.

- если логика клиентского приложения позволяет, то создать процедуру сервера, которая по имени пользователя возвращает соответствующий набор
...
Рейтинг: 0 / 0
Права на записи в таблице.
    #32017224
SergeK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
альтернативный вариант
то же самое можно сделать не использую процедуру, а сделав поле через 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 ... --здесь должны быть соответствующие системные таблички
...
Рейтинг: 0 / 0
Права на записи в таблице.
    #32017237
Владимир Смирнов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объединив предложения 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.
...
Рейтинг: 0 / 0
Права на записи в таблице.
    #32017243
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше использовать систему безопасности сервера, т.е. давать доступ на представления или процедуры.
...
Рейтинг: 0 / 0
Права на записи в таблице.
    #32017355
Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть, как я понял. Нужно убрать права на select у таблицы, и сделать вью или процедуру, на которую у юзера права будут. Так?
...
Рейтинг: 0 / 0
Права на записи в таблице.
    #32017356
Tarantino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно лучше всего убрать права на SELECT, INSERT, UPDATE и DELETE сделать соответсвующую вью и процедуры, которые будут проверять права может ли пользователь делать тото или тото, естественно нужно будут сделать таблицу где будут указаны права конкретных пользователей.
Вообщем всё зависит от твоей фантазии.
...
Рейтинг: 0 / 0
Права на записи в таблице.
    #32017357
Oleg F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так. Только если убрать право на SELECT у таблицы и оставить право на SELECT у VIEW, то запрос не будет работать. Будет выдавать ошибку, что прав на SELECT не хватает (можете проверить сами, я точно не помню, давно это делал).
Причина в том, что VIEW - это всего лишь хранимый запрос, и не более того. Когда пользователь посылает SELECT к view, то SQL Server автоматически генерит новый запрос к исходной таблице на основе текста VIEW и запроса пользователя. И если прав на таблицу нет, то будет ошибка.
То же самое будет, если использовать не VIEW, а хранимую процедуру. Дать право на EXECUTE недостаточно, нужно будет дать право на SELECT исходной таблицы.
Впрочем, проверьте всё это сами, это делается легко.
...
Рейтинг: 0 / 0
Права на записи в таблице.
    #32017359
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно поняли.
Тогда на запрос select * from [Таблица] пользоваетелям будет выдаваться ошибка об остуствии соответсвующих прав и они смогут делать select только из доступного им view-a, в которм уже накладывается ограничение

PS
IMHO лучше разрешать доступ к объектам не отдельным пользователям, а ролям. Тогда включением(исключением)пользоваетля в соответсвующую группу можно давать(отбирать) ему права без перебора всех объектов.
...
Рейтинг: 0 / 0
Права на записи в таблице.
    #32017421
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Oleg F: Посмотрите информацию о иерархии прав доступа. Описанная Вами ситуация будет иметь место только если владельцы таблицы и вью(процедуры) - разные. Если владелец один, то прав на таблицу не надо
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Права на записи в таблице.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]