кажется, что вы расчеты по группам ограничения не являются правильными:
Позвольте мне поделиться с вами, как делает он работает. для каждой системы группы назначить один байт:
- Группа 1 - 0x8000 = 1000 0000 0000 0000
- Группа 2 - 0x4000 = 0100 0000 0000 0000
- Группа 3 - 0x2000 = 0010 0000 0000 0000
- Группа 4 - 0x1000 = 0001 0000 0000 0000
- Группа 5 - 0x0800 = 0000 1000 0000 0000
- Группа 6 - 0x0400 = 0000 0100 0000 0000
- .... .
При назначении элемента к любой группе она фактически устанавливает флаги в группе масок: Давайте предположим, что поставщик принадлежит к группе 3 и группе 6, чем маска будет:
0010 0100 0000 0000 = 0x2400
Это можно увидеть в групповых масках для каждой поддерживаемой таблицы.
Пользователи также принадлежат к группам по тому же правилу. Чем система ищет перехваты, какие группы принадлежат пользователю и субъекту и вычисляют права оценки. Также не забывайте, что существуют разные типы групп, которые могут быть рассчитаны по-разному (группа A, B, A инверсная, B инверсная)
В вашем случае вы присоединяетесь ко всем сущностям для пользователей, которые не верны. Я думаю, вам нужно написать какую-то процедуру/функцию, которая получит доступные группы для сущности и пользователя и присоединиться к этому условию. Возможно, вам просто нужно найти, какой пользователь и сущность имеют хотя бы один бит в одной позиции - это означает, что объект и пользователь принадлежат к одной группе, но это будет работать только для группы A.
Также, сложность заключается в том, что SQL Server не поддерживает побитовые операции между двумя двоичными файлами (https://msdn.microsoft.com/en-us/library/ms176122.aspx), поэтому вам нужно преобразовать его в int. Чтобы избежать переполнения, вы должны получить только часть строки и сравнить часть за частью. Я предпочитаю пытаться получить Группы от сущности и пользователя и побитовое выполнение бит, чтобы убедиться, что переполнения нет.
Надеюсь, что это поможет.
так в чем проблема и что вы пробовали? – Hybridzz
Я обновил, как указано выше, –
Вы пытаетесь распечатать информацию о безопасности на уровне строк? – Hybridzz