Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как определить доступ пользователя к данным ?  [new]
04102016
Guest
Здравствуйте !
Есть хранимая процедура вида
CREATE PROCEDURE ShowTest
AS
select * from Test


на выполнение которой дан доступ некоторой группе пользователей. На саму таблицу Test никаких разрешений/ограничений не установлено. Однако пользователь выполняя процедуру видит данные из таблицы, следовательно доступ на SELECT у него есть.

при этом has_perms_by_name('Test', 'object', 'select') возвращает 0

Как же определить что у пользователя всё же есть доступ к данным ?
4 окт 16, 12:48    [19741474]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37155
04102016
Однако пользователь выполняя процедуру видит данные из таблицы, следовательно доступ на SELECT у него есть.
Одно из другого никак не следует, потому что есть Ownership Chaining.
4 окт 16, 12:57    [19741557]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
04102016
Guest
Как же определить что у пользователя всё же есть доступ к данным ?
4 окт 16, 13:16    [19741709]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
04102016,

автор
Однако пользователь выполняя процедуру видит данные из таблицы, следовательно доступ на SELECT у него есть.

Неверный вывод и необоснованный. Пользователь не выполняет никаких SELECT в рассматриваемом случае. Пользователь выполняет EXECUTE.

Читайте о цепочках владения.
4 окт 16, 13:25    [19741794]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
04102016
Guest
Да я понимаю что пользователь выполняет EXECUTE и has_perms_by_name('TestShow', 'object', 'execute') = 1

Прочитал статью цепочки владения.
Всё красиво написано и разжёвано !!!

Одно не понятно: Как определить что у пользователя есть доступ к данным таблицы Test опосредованно через некую хранимку
4 окт 16, 14:20    [19742200]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
buven
Member

Откуда:
Сообщений: 792
04102016,

Собрать все объекты нужного типа, которые в dependecies у нужной таблицы. Найти всех, у кого есть права на execute этих объектов.

Думаю запрос будет варьироваться от версии сервера.
4 окт 16, 14:45    [19742330]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
buven
04102016,

Собрать все объекты нужного типа, которые в dependecies у нужной таблицы. Найти всех, у кого есть права на execute этих объектов.

Думаю запрос будет варьироваться от версии сервера.

бред, процедура может использовать объект но на выходе информации из него не будет и получить то что ТС хотчет не возможно, ибо в скл доступ к объектам а не "к данным"
4 окт 16, 14:53    [19742366]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
04102016
Guest
TaPaK
в скл доступ к объектам а не "к данным"

Хорошо, как узнать есть ли доступ к объекту опосредованно ?
4 окт 16, 14:59    [19742389]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
[quot 04102016]
TaPaK
в скл доступ к объектам а не "к данным"

Хорошо, как узнать есть ли доступ к объекту опосредованно ?[/quot
никак, я же сказал уже :) извращённым способом через dependecies, но вы получите картину которая не соответствует реальности
4 окт 16, 15:09    [19742435]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
buven
Member

Откуда:
Сообщений: 792
TaPaK
бред, процедура может использовать объект но на выходе информации из него не будет и получить то что ТС хотчет не возможно


Я понял о чем вы. Тот случай, когда у нас в процедуре
declare @SQL varchar(max)
set @SQL = 'select * from table'
exec @SQL


TaPaK
...ибо в скл доступ к объектам а не "к данным"

Безопасность на уровне строк
Такой подход для вас - откровение?
4 окт 16, 16:50    [19742996]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
buven,

Как определить что у пользователя есть доступ к данным таблицы Test опосредованно через некую хранимку
4 окт 16, 16:56    [19743043]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
Браузер глюкнул.

Вопрос
автор
Как определить что у пользователя есть доступ к данным таблицы Test опосредованно через некую хранимку


лишен всякого смысла. Доступ к таблице не у пользователя, а у владельца процедуры. У пользователя доступ к процедуре.
4 окт 16, 16:58    [19743062]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
buven
TaPaK
бред, процедура может использовать объект но на выходе информации из него не будет и получить то что ТС хотчет не возможно


Я понял о чем вы. Тот случай, когда у нас в процедуре
declare @SQL varchar(max)
set @SQL = 'select * from table'
exec @SQL


TaPaK
...ибо в скл доступ к объектам а не "к данным"

Безопасность на уровне строк
Такой подход для вас - откровение?
\
дальше заголовка не читали?
4 окт 16, 16:59    [19743064]     Ответить | Цитировать Сообщить модератору
 Re: Как определить доступ пользователя к данным ?  [new]
buven
Member

Откуда:
Сообщений: 792
TaPaK
дальше заголовка не читали?

Читал :)
4 окт 16, 17:02    [19743079]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить