|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
Добрый час! Подскажите как реализовать для разных пользователей доступ только к их к записям в одной таблице? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2022, 20:49 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2022, 20:58 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
invm, Благодарю! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2022, 21:03 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
На самом деле, если редакция сервера не позволяет, или лень разбираться с безопасностью на уровне строк - можно проще, и более кондовым способом. Нужно создать View, в котором фильтровать записи, в зависимости от пользователя, соответственно встроив логику security function в запрос, лежащий в основе View. Ну и, соответственно, закрыв везде доступ для пользователей к таблицам, и открыв - к вьюхам. Кстати, у такого подхода есть несколько значительных преимуществ перед вариантом с row level security. 1. Производительность. Когда вы определяете security function для какой-то таблицы она всегда применяется через nested loop к каждой строке таблицы. И если этих строк МНОГО - это влетит вам в копеечку с т.з. производительности. Если вы определили security function с использованием каких-либо пользовательских таблиц (например - списка принадлежности пользователя к филиалу) - нужно позаботиться, чтобы эта вспомогательная таблица была правильно проиндексирована, а запрос, лежащий в основе security function - был очень, очень, очень оптимизированным. Имейте также ввиду, что вы, скорее всего, лишитесь возможности использовать подсказки уровня запроса, типа option (hash join), поэтому ваш прикладной код может внезапно сломаться, если вы навесите секьюрность потом, на работающий код. 2. Отсутствие возможности "запретить" row level security для каких-то отдельных запросов, и оставить включенной для всех остальных. Вам также придется не забыть прописать в security function явным образом возможность для суперпользователей просматривать всё содержимое. Короче говоря, row level security - хороша всем, если вы навешиваете ее на небольшую табличку, максимум в пару десятков миллионов записей, ваша security function представляет из себя скалярное выражение, и вам никогда не потребуется прочитывать всю таблицу из под ограниченного пользователя. Ну и программисты у вас не криворукие рукожопы. Я, например, вынужден был отказаться, и вернуться в вьюхам. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 11:48 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
JDV invm, Благодарю! Это поспешно , вы просто не знаете еще своего счастья ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 13:24 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
Ролг Хупин, а как лучше?) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 16:59 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
uaggster, а покажите пример кода именно фильтрации? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 17:00 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
JDV Ролг Хупин, а как лучше?) Задачу обдумайте хорошо и почитайте то, чо написал uaggster. Производительность и пр. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 19:01 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
Ролг Хупин, я понял .... уже изучаю ... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 19:29 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2022, 19:35 |
|
Разграничение доступа на уровне записей
|
|||
---|---|---|---|
#18+
JDV, Добрый час А подскажите как для это функции сделать два набора сотрудников с разными таками же уровнями но чтоб они видели друг друга не зависимо ... к примеру 2 отдела ? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Небольшое объяснение реализации кода: используйте level_no для управления уровнем доступа пользователя к данным, чем меньше значение level_no, тем выше уровень и тем выше полномочия. А именно: level_no равен 0 (соответствует пользователю CEO), вы можете просматривать level_no как 0 (соответствует самому генеральному директору), 1 (соответствует пользователю Manger) и 2 (соответствует обычному пользователю Employee); level_no равно 1 для просмотра данных о себе и сотруднике; и level_no Для 2 можно просматривать только свои собственные строки данных. Когда мы обнаруживаем, что запрошенный пользователь соответствует соответствующему заголовку, мы думаем, что этот пользователь имеет соответствующие разрешения, то есть функция возвращает значение 1, в противном случае мы думаем, что нет разрешения на доступ к соответствующей строке. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 10:04 |
|
|
start [/forum/topic.php?fid=46&fpage=3&tid=1683848]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 150ms |
0 / 0 |