Как добиться безопасности на уровне строк в SQL Server 2014

Есть ли способ получить безопасность на уровне строк в SQL Server 2014?

Моя проблема:

  • У меня есть таблица с данными по нескольким регионам
  • Я создал представление для каждого региона
  • У конкретного пользователя будет доступ к просмотрам определенных регионов.
  • Но без предоставления доступа к базовой таблице эти пользователи не могут получить доступ к представлениям

Мне нужно ограничить пользователей просмотром только определенных строк. Есть ли возможности для этого?


person vignesh    schedule 30.05.2019    source источник
comment
Прочтите рекомендации по безопасности на уровне строк SQL Server и постарайтесь конкретизировать свой вопрос: docs.microsoft.com/en-us/sql/relational-databases/security/   -  person Pop Catalin    schedule 30.05.2019
comment
Безопасность на уровне строк была добавлена ​​в SQL Server 2016. Если вам нужно реализовать что-то подобное, вам нужно будет создать что-то специально для вас; возможно, заставляя пользователей использовать SP для доступа к данным и отменяя их разрешения SELECT, UPDATE, DELETE и т. д. Если вы не можете этого сделать и у вас должна быть безопасность на уровне строк, я бы посоветовал выполнить обновление. Не дешевый вариант (в зависимости от необходимых лицензий и объема), но если требуется, чтобы у вас была эта функциональность, и вы не можете предоставить ее другим способом, то решать, что они хотят делать, решать бизнесу.   -  person Larnu    schedule 30.05.2019


Ответы (2)


Я добился этого, создав представления для указанных строк и предоставив разрешение только на представления, а не на базовую таблицу.

  • поэтому пользователь видит только строки, возвращаемые представлениями. Мы можем контролировать возвращаемые строки с помощью предложения where в поле зрения.
  • но таблица может содержать и другие строки

ключевые термины: цепочка владения

person vignesh    schedule 14.06.2019

Тот же запрос SQL возвращает результаты на основе идентичности. Никакого специального кода базы данных не требуется. Вы можете управлять возвратом строк и столбцов и даже агрегированием. Например, приведенный ниже SQL будет возвращать разные результаты для менеджеров, аналитиков и разработчиков. выберите * из employee_salaries;

person djafar ould slimane    schedule 30.05.2019
comment
Как select * from employee_salaries; сам по себе возвращает разные результаты для разных людей? Это вернет каждую строку и каждый столбец из таблицы employee_salaries. Ничто в этом утверждении не останавливает возвращение строки / столбца. Не уточняя, почему это утверждение может привести к такому поведению, этот ответ будет только привлекать (дальнейшие) отрицательные голоса. - person Larnu; 30.05.2019