Управление доступом к данным — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Владелец объекта)
(Представления и права)
Строка 95: Строка 95:
  
 
= Представления и права =
 
= Представления и права =
 +
Использование представлений дает возможность выдавать права не на всю таблицу целиком, а только на ее часть, позволяя производить более тонкую настройку доступа.
 +
 
== Фильтрованная таблица ==
 
== Фильтрованная таблица ==
 +
Создается '''представление''' только '''для части кортежей''', для которой определяются права. Данное представление '''может быть изменяемым'''.
 +
 +
=== Пример ===
 +
<font color=green>-- Создать представление, состоящее только из студентов факультета ИТиП</font>
 +
<font color=blue>create view <font color=black>FITPStudents <font color=blue>as</font>
 +
<font color=blue>select <font color=gray>* <font color=blue>from <font color=black>Students</font>
 +
<font color=blue>where <font color=black>GId <font color=blue>in</font>
 +
<font color=gray>(<font color=blue>select <font color=black>GId <font color=blue>from <font color=black>Group <font color=blue>where <font color=black>FId <font color=gray>= <font color=green>'ИТиП'<font color=gray>)<font color=black>
 +
 +
<font color=green>-- Выдать все права на это представление декану ИТиПа</font>
 +
<font color=blue>grant all priviledges on <font color=black>FITPStudents <font color=blue>to <font color=black>FITPDean<font color=gray>;<font color=black>
 +
 
== Спроецированная таблица ==
 
== Спроецированная таблица ==
 +
Создается '''представление''' только '''для части атрибутов''', для которой определяются права. Данное представление '''может быть изменяемым'''.
 +
 +
=== Пример ===
 +
<font color=green>-- Создать представление, состоящее только из табельных номеров, имен и фамилий студентов</font>
 +
<font color=blue>create view <font color=black>PublicStudents <font color=blue>as</font>
 +
<font color=blue>select <font color=black>SId<font color=gray>, <font color=black>FirstName<font color=gray>, <font color=black>LastName <font color=green>-- без данных группы, паспорта и тд</font>
 +
<font color=blue>from <font color=black>Students
 +
 +
<font color=green>-- Выдать публичное право выборки для созданного представления</font>
 +
<font color=blue>grant select on <font color=black>PublicStudents <font color=blue>to <font color=black>public<font color=grey>;<font color=black>
 +
 
== Агрегированная таблица ==
 
== Агрегированная таблица ==
 +
Создается '''представление''', содержащее '''агрегированные данные''' вместо базовых, для которых определяются права. Данное представление, как правило, ''' не является изменяемым'''.
 +
 +
Если, при этом, пользователь имеет '''право на изменение''' хотя бы части агрегируемых данных, он может проводить '''дифференцированные атаки''', которые позволят '''определить''' частично или полностью '''исходные данные'''.
 +
 +
=== Пример ===
 +
<font color=green>-- Создать представление, позволяющее смотреть только на средние баллы студентов,</font>
 +
<font color=green>--  а не на конкретные значения по предметам</font>
 +
<font color=blue>create view <font color=black>StudentPoints <font color=blue>as</font>
 +
<font color=blue>select <font color=black>SId<font color=grey>, <font color=black>avg<font color=grey>(<font color=black>points<font color=grey>)</font>
 +
<font color=blue>from <font color=black>Students <font color=blue>natural join <font color=black>Marks
 +
 +
<font color=green>-- Выдать публичное право выборки на созданное представление</font>
 +
<font color=blue>grant select on <font color=black>StudentPoints to public<font color=grey>;<font color=black>

Версия 10:33, 20 декабря 2021

Эта статья находится в разработке!

Схемы управления доступом

Дискреционная схема

Определение:
Дискреционная (или избирательная) схема — политика, в рамках которой поддерживаются списки, содержащие информацию о том, кто и к чему имеет доступ.

В данной схеме используются следующие понятия:

  • Объекты и набор прав для них, не связанных между собой (например, данные и права на добавление, удаление, чтение, обновление и тп);
  • Пользователи, обладающие какими-то правами на какие-то объекты;
  • Группы пользователей и права, присваиваемые всем членам этих групп в дополнение к их собственным;

Мандатная схема

Определение:
Мандатная схема — политика, в рамках который к данным и тем, кто имеет к ним доступ, присылаются классификационные уровни.
Уровни доступа в мандатной схеме

Уровни доступа располагаются по возрастанию: от общедоступного [math]S_0[/math] до самого защищенного [math]S_4[/math]. Такие уровни присваиваются как пользователям, так и объектам.

С учетом уровней, возможность выполнения операций определяется по следующим правилам:

  • Чтение: [math]уровень[/math] [math]данных \lt уровня[/math] [math]пользователя[/math];
  • Изменение: [math]уровень[/math] [math]данных = уровню[/math] [math]пользователя[/math]. Разрешение изменения менее защищенных данных может повлечь случайное рассекречивание информации, если, например, изменения на уровне [math]S_0[/math] делаются на основе информации с [math]S_2[/math];
  • Добавление: [math]уровень[/math] [math]данных \gt уровню[/math] [math]пользователя[/math];

Пользователи и группы

Определение:
Группа (в рамках стандарта) — набор пользователей; иерархии групп не предполагается.

В рамках стандарта существуют пользователи и группы, но не существует стандартных способов управления ими.

Управление пользователями

Наиболее общепринятый синтаксис (не SQL):

create user имя [password 'пароль']
alter user имя [password 'пароль']
drop user имя

Управление группами

Наиболее общепринятый синтаксис (не SQL):

create group имя
alter group имя {add|drop} user пользователь
drop group имя

Data Control Language

Добавление прав

grant {select|insert|update|delete|create
      |execute|trigger|usage||all priviledges}
on {table|database|view|procedure|function|…} имя
to {пользователь|group группа|public}
[with grant option] -- возможность наделять этим правом других пользователей и групп

Примеры

 -- Выдача всех прав на таблицу студентов группе деканов
 --   с возможностью наделения этим правом
grant all priviledges on Students
 to group Deans with grant option;
 -- Выдача публичного права на выборку из таблицы студентов
grant select on Students to public;

Удаление прав

revoke
[grant option for] -- забрать не само право, а возможность его делегирования
{select|insert|update|delete|create
  |execute|trigger|usage||all priviledges}
on {table|database|view|procedure|function|…} имя
from {пользователь|group группа|public}
[cascade|restrict] -- если тот, у кого право забирается, наделил им кого-то еще,
                   --   cascade также забирает право у всей цепочки получивших,
                   --   restrict выдаст ошибку, если право было делегировано
                   -- аналогично, как и про само право, так и про возможность его делегации

Примеры

 -- Удалить у группы деканов право вставки в таблицу студентов
 --   с отзывом этого права у всех, кто получил его по цепочке от деканов
revoke insert on Students
 from group Deans cascade;
 -- Удалить публичное право обновления таблицы студентов
revoke update on Students from public;

Владелец объекта

Определение:
Владелец объекта (базы, таблицы, схемы) — пользователь, создавший объект.
  • Всеми правами на объект он обладает неявно, вследствие чего их нельзя у него отозвать, но можно передать право собственности.
  • После передачи объекта, все неявные права на него бывшим владельцем теряются — для их сохранения необходимо предварительно их явным образом выдать.

Передача права владения объектом:

alter {table|schema|database|…}
owner to пользователь

Представления и права

Использование представлений дает возможность выдавать права не на всю таблицу целиком, а только на ее часть, позволяя производить более тонкую настройку доступа.

Фильтрованная таблица

Создается представление только для части кортежей, для которой определяются права. Данное представление может быть изменяемым.

Пример

-- Создать представление, состоящее только из студентов факультета ИТиП
create view FITPStudents as
select * from Students
where GId in
(select GId from Group where FId = 'ИТиП')
-- Выдать все права на это представление декану ИТиПа
grant all priviledges on FITPStudents to FITPDean;

Спроецированная таблица

Создается представление только для части атрибутов, для которой определяются права. Данное представление может быть изменяемым.

Пример

-- Создать представление, состоящее только из табельных номеров, имен и фамилий студентов
create view PublicStudents as
select SId, FirstName, LastName -- без данных группы, паспорта и тд
from Students
-- Выдать публичное право выборки для созданного представления
grant select on PublicStudents to public;

Агрегированная таблица

Создается представление, содержащее агрегированные данные вместо базовых, для которых определяются права. Данное представление, как правило, не является изменяемым.

Если, при этом, пользователь имеет право на изменение хотя бы части агрегируемых данных, он может проводить дифференцированные атаки, которые позволят определить частично или полностью исходные данные.

Пример

-- Создать представление, позволяющее смотреть только на средние баллы студентов,
--   а не на конкретные значения по предметам
create view StudentPoints as
select SId, avg(points)
from Students natural join Marks
-- Выдать публичное право выборки на созданное представление
grant select on StudentPoints to public;