Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
04102016
Guest |
Здравствуйте ! Есть хранимая процедура вида CREATE PROCEDURE ShowTest AS select * from Test на выполнение которой дан доступ некоторой группе пользователей. На саму таблицу Test никаких разрешений/ограничений не установлено. Однако пользователь выполняя процедуру видит данные из таблицы, следовательно доступ на SELECT у него есть. при этом has_perms_by_name('Test', 'object', 'select') возвращает 0 Как же определить что у пользователя всё же есть доступ к данным ? |
4 окт 16, 12:48 [19741474] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
4 окт 16, 12:57 [19741557] Ответить | Цитировать Сообщить модератору |
04102016
Guest |
Как же определить что у пользователя всё же есть доступ к данным ? |
4 окт 16, 13:16 [19741709] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
04102016,
Неверный вывод и необоснованный. Пользователь не выполняет никаких SELECT в рассматриваемом случае. Пользователь выполняет EXECUTE. Читайте о цепочках владения. |
||
4 окт 16, 13:25 [19741794] Ответить | Цитировать Сообщить модератору |
04102016
Guest |
Да я понимаю что пользователь выполняет EXECUTE и has_perms_by_name('TestShow', 'object', 'execute') = 1 Прочитал статью цепочки владения. Всё красиво написано и разжёвано !!! Одно не понятно: Как определить что у пользователя есть доступ к данным таблицы Test опосредованно через некую хранимку |
4 окт 16, 14:20 [19742200] Ответить | Цитировать Сообщить модератору |
buven Member Откуда: Сообщений: 792 |
04102016, Собрать все объекты нужного типа, которые в dependecies у нужной таблицы. Найти всех, у кого есть права на execute этих объектов. Думаю запрос будет варьироваться от версии сервера. |
4 окт 16, 14:45 [19742330] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
бред, процедура может использовать объект но на выходе информации из него не будет и получить то что ТС хотчет не возможно, ибо в скл доступ к объектам а не "к данным" |
||
4 окт 16, 14:53 [19742366] Ответить | Цитировать Сообщить модератору |
04102016
Guest |
Хорошо, как узнать есть ли доступ к объекту опосредованно ? |
||
4 окт 16, 14:59 [19742389] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
[quot 04102016]
Хорошо, как узнать есть ли доступ к объекту опосредованно ?[/quot никак, я же сказал уже :) извращённым способом через dependecies, но вы получите картину которая не соответствует реальности |
||
4 окт 16, 15:09 [19742435] Ответить | Цитировать Сообщить модератору |
buven Member Откуда: Сообщений: 792 |
Я понял о чем вы. Тот случай, когда у нас в процедуре declare @SQL varchar(max) set @SQL = 'select * from table' exec @SQL
Безопасность на уровне строк Такой подход для вас - откровение? |
||||
4 окт 16, 16:50 [19742996] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
buven, Как определить что у пользователя есть доступ к данным таблицы Test опосредованно через некую хранимку |
4 окт 16, 16:56 [19743043] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Браузер глюкнул. Вопрос
лишен всякого смысла. Доступ к таблице не у пользователя, а у владельца процедуры. У пользователя доступ к процедуре. |
||
4 окт 16, 16:58 [19743062] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
дальше заголовка не читали? |
||||||
4 окт 16, 16:59 [19743064] Ответить | Цитировать Сообщить модератору |
buven Member Откуда: Сообщений: 792 |
Читал :) |
||
4 окт 16, 17:02 [19743079] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |