Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Обрезка таблицы  [new]
aa10th
Member

Откуда:
Сообщений: 6
Добрый день, товарищи.

Вопрос следующий имею:
Есть таблица, записи хранятся по строкам. Есть ПО, которое делает запрос SQL под пользователем SQL.

Задача настроить права пользователям SQL так, чтобы ограничения были одновременно и на строки и на часть столбцов. Т.е.

в подобной таблице

a1|a2|a2|a4|a5|a6|a7|a8
id1|..|..|..|..|..|..|..|..|..
id1|..|..|..|..|..|..|..|..|..
id1|..|..|..|..|..|..|..|..|..
id2|..|..|..|..|..|..|..|..|..
id2|..|..|..|..|..|..|..|..|..
id3|..|..|..|..|..|..|..|..|..
id1|..|..|..|..|..|..|..|..|..
id2|..|..|..|..|..|..|..|..|..

id1 должен видеть только колонки a1-a5, id2 - всю таблицу, а id3 - a1-a4

Такое вообще возможно? Как это сделать?

Обрезать запрос на уровне ПО -- не вариант, пытливый юзер легко доберется до не предназначенной для него информации в силу специфики самого ПО

Спасибо.
30 мар 17, 10:24    [20349700]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
iiyama
Member

Откуда:
Сообщений: 642
aa10th,
Row level security
30 мар 17, 10:27    [20349711]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
aa10th
Member

Откуда:
Сообщений: 6
iiyama
aa10th,
Row level security


Спасибо, а как прикрутить фильтр ещё и на колонки?
30 мар 17, 10:53    [20349836]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
Rankatan
Member

Откуда:
Сообщений: 250
Закрываешь полный доступ к таблице и делаешь представление
30 мар 17, 10:56    [20349848]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
aa10th
Member

Откуда:
Сообщений: 6
Rankatan
Закрываешь полный доступ к таблице и делаешь представление


Как это делается?
30 мар 17, 11:01    [20349881]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
o-o
Guest
Rankatan
Закрываешь полный доступ к таблице и делаешь представление

такое очень динамическое магическое представление,
которое то 10 столбцов покажет, то 2?
автор
id1 должен видеть только колонки a1-a5, id2 - всю таблицу, а id3 - a1-a4
30 мар 17, 11:04    [20349898]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
iiyama
Member

Откуда:
Сообщений: 642
aa10th,
извините за невнимательность, проигнорировал вторую часть вопроса про столбцы

там это

Удачи
30 мар 17, 11:10    [20349918]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
iiyama
Member

Откуда:
Сообщений: 642
Добавлю важный комментарий
ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ:даSQL Server (начиная с 2016)даБаза данных SQL AzureнетХранилище данных SQL AzureнетХранилище параллельных данных
30 мар 17, 11:16    [20349946]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
aa10th
Member

Откуда:
Сообщений: 6
iiyama
Добавлю важный комментарий
ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ:даSQL Server (начиная с 2016)даБаза данных SQL AzureнетХранилище данных SQL AzureнетХранилище параллельных данных


Спасибо, но это не совсем подходящее решение. Если данные в маскированных столбцах количественные, а MS SQL отдаст ХХХ.ХХ, то на уровне приложения возникнет ошибка, ПО работает по принципу ETL, т.е. забирает данные себе.
Ну и до кучи, у меня 2008 SR2.
30 мар 17, 12:38    [20350389]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
aleks2
Guest
o-o
Rankatan
Закрываешь полный доступ к таблице и делаешь представление

такое очень динамическое магическое представление,
которое то 10 столбцов покажет, то 2?
автор
id1 должен видеть только колонки a1-a5, id2 - всю таблицу, а id3 - a1-a4


Ну... оно могет показать фигушку, вместо запрещенных столбцов.
30 мар 17, 12:40    [20350402]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
iiyama
Member

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

aa10th,
ИМХО, не претендую ни на что

если 2008 и нельзя трогать приложение, то
0. Создаем свой секьюрити предикат
1. Таблицу переименовываем
2. Создаем View на таблицу с оригинальным именем таблицы, как
create View [Оригинальное имя таблицы] as
 select [ключи не трогаем],
CASE when fn_columnsecuritypredicate(параметры)=1 then field1 else NULL END as field1, ... as fieldN ...

3. Создаем INSTEAD OF INSERT, UPDATE для View с участием Вашей fn_columnsecuritypredicate

PS. Естественно все на тестовой машине с предварительной подготовкой 3-х писем
30 мар 17, 12:57    [20350485]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
Владислав Колосов
Member

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

закройте прямой доступ к таблице, напишите инлайн-функцию в качестве интерфейса. Перепишите ПО для работы с функцией.
30 мар 17, 13:17    [20350593]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
aa10th
Member

Откуда:
Сообщений: 6
Владислав Колосов
aa10th,

закройте прямой доступ к таблице, напишите инлайн-функцию в качестве интерфейса. Перепишите ПО для работы с функцией.


Приложение коробочное, переписать нельзя.
30 мар 17, 15:55    [20351535]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
aa10th
Member

Откуда:
Сообщений: 6
iiyama
aa10th,

0. Создаем свой секьюрити предикат
1. Таблицу переименовываем
2. Создаем View на таблицу с оригинальным именем таблицы, как
create View [Оригинальное имя таблицы] as
 select [ключи не трогаем],
CASE when fn_columnsecuritypredicate(параметры)=1 then field1 else NULL END as field1, ... as fieldN ...

3. Создаем INSTEAD OF INSERT, UPDATE для View с участием Вашей fn_columnsecuritypredicate

PS. Естественно все на тестовой машине с предварительной подготовкой 3-х писем


Два письма уже вскрыли.

А в 2008 fn_securitypredicate точно есть? Гуглится только про 2016.
30 мар 17, 16:37    [20351781]     Ответить | Цитировать Сообщить модератору
 Re: Обрезка таблицы  [new]
iiyama
Member

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

fn_columnsecuritypredicate - это тот предикат, который Вы должны реализовать сами и гугл Вам не поможет, тк он не знает, что
id1 должен видеть только колонки a1-a5, id2 - всю таблицу, а id3 - a1-a4


PS. Хотя ошибаюсь, он уже проиндексировал эту страничку :)
30 мар 17, 18:09    [20352102]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить