#sql-server #tsql #sql-server-2017 #sql-server-2019
Вопрос:
У меня есть набор данных в одной таблице, как показано ниже, я ищу способ ограничить базу разрешений на выбор для столбца и набора данных или узнать из текущего контекста стек вызывающего абонента.
Таблица x:
- Тип возраста Id
- 1 ГОД1 мужчина
- 2 возраст 2. Женский
- 3 Возраст 3. мужчина
- 4 Возраст 4. Женский
Таблица y:
- Размер идентификатора
- 1 Размер1
- 2 Размер2
- 3 размер3
- 4 размер4
Для пользователя x: Мне нужно, чтобы пользователь x прочитал таблицу y и таблицу x в случае, если мужчина, и прочитал таблицу y и таблицу x без возраста, если набор данных женский.
Мое мнение: Мужской запрос
Select * from table y inner join table x on y.Id = x.id
Where x.Type = 'male'
Женский запрос
Select y.*, x.id, x.type from table y inner join table x on y.Id = x.id
Where x.Type = 'female'
Зная, что в приведенном выше представлении мне нужно предоставить доступ к таблицам y и x, разработчик использует одну и ту же таблицу x для одного и того же пользователя x.
Или я могу использовать роли, но мне нужно знать, стек ли выполнения из представления или таблицы.
В роли безопасности: Если вызов женского вида, то запретить по возрасту, иначе Разрешить *
Спасибо
Ответ №1:
если я правильно понимаю, чего вы хотите достичь, я думаю, что это решение:
select y.*, x.id, x.type, IIF(x.type = 'female', -1, x.age) age
from tabley y
join tablex x on y.Id = x.id
это покажет -1 для возраста для «женских» записей
Комментарии:
1. На самом деле, если разработчик сделает выбор из таблицы, он сможет увидеть женский возраст, в котором я ищу решение, чтобы скрыть эти данные только для женщин
2. если это так, я предлагаю создать представление из запроса выше и предоставить разрешение только этому представлению, а не базовым таблицам…
3. Вы не можете этого сделать. Помните, что вам не нужно быть полным запросом*, вы не можете сделать это в представлении независимо от таблицы