Управление доступом к данным — различия между версиями
Cuciev (обсуждение | вклад) (Примеры изменены) |
м (rollbackEdits.php mass rollback) |
||
(не показано 9 промежуточных версий 2 участников) | |||
Строка 5: | Строка 5: | ||
{{Определение | {{Определение | ||
|id=sheme1 | |id=sheme1 | ||
− | |definition='''Дискреционная (или избирательная) схема''' {{---}} политика, в рамках которой поддерживаются списки, содержащие информацию о том, кто и к чему имеет доступ. | + | |definition='''Дискреционная''' (или избирательная) '''схема''' {{---}} политика, в рамках которой поддерживаются списки, содержащие информацию о том, кто и к чему имеет доступ. |
}} | }} | ||
В данной схеме используются следующие понятия: | В данной схеме используются следующие понятия: | ||
Строка 50: | Строка 50: | ||
<font color=blue>on <font color=red>{<font color=blue>table<font color=grey>|<font color=blue>database<font color=grey>|<font color=blue>view<font color=grey>|<font color=blue>procedure<font color=grey>|<font color=blue>function<font color=grey>|<font color=red>…} имя</font> | <font color=blue>on <font color=red>{<font color=blue>table<font color=grey>|<font color=blue>database<font color=grey>|<font color=blue>view<font color=grey>|<font color=blue>procedure<font color=grey>|<font color=blue>function<font color=grey>|<font color=red>…} имя</font> | ||
<font color=blue>to <font color=red>{пользователь<font color=grey>|<font color=blue>group <font color=red>группа<font color=grey>|<font color=blue>public<font color=red>}</font> | <font color=blue>to <font color=red>{пользователь<font color=grey>|<font color=blue>group <font color=red>группа<font color=grey>|<font color=blue>public<font color=red>}</font> | ||
− | <font color=red>[<font color=blue>with grant option<font color=red>]<font color= | + | <font color=red>[<font color=blue>with grant option<font color=red>]<font color=black> |
+ | |||
+ | Можно добавить возможность наделять правом других пользователей и групп с помощью опции: | ||
+ | <font color=red>[<font color=blue>with grant option<font color=red>]<font color=black> | ||
=== Примеры === | === Примеры === | ||
− | + | Выдача всех прав на таблицу товаров группе менеджеров с возможностью наделения этим правом: | |
− | + | <font color=blue>grant all priviledges on <font color=black>Items <font color=blue>to group <font color=black>ShopManagers <font color=blue>with grant option<font color=grey>;<font color=black> | |
− | <font color=blue>grant all priviledges on <font color=black>Items | ||
− | |||
− | + | Выдача публичного права на выборку из таблицы товаров: | |
<font color=blue>grant select on <font color=black>Items <font color=blue>to public<font color=grey>;<font color=black> | <font color=blue>grant select on <font color=black>Items <font color=blue>to public<font color=grey>;<font color=black> | ||
== Удаление прав == | == Удаление прав == | ||
<font color=blue>revoke</font> | <font color=blue>revoke</font> | ||
− | <font color=red>[<font color=blue>grant option for<font color=red>] | + | <font color=red>[<font color=blue>grant option for<font color=red>]</font> |
<font color=red>{<font color=blue>select<font color=grey>|<font color=blue>insert<font color=grey>|<font color=blue>update<font color=grey>|<font color=blue>delete<font color=grey>|<font color=blue>create</font> | <font color=red>{<font color=blue>select<font color=grey>|<font color=blue>insert<font color=grey>|<font color=blue>update<font color=grey>|<font color=blue>delete<font color=grey>|<font color=blue>create</font> | ||
<font color=grey> |<font color=blue>execute<font color=grey>|<font color=blue>trigger<font color=grey>|<font color=blue>usage<font color=grey>|<font color=red>…<font color=grey>|<font color=blue>all priviledges<font color=red>}</font> | <font color=grey> |<font color=blue>execute<font color=grey>|<font color=blue>trigger<font color=grey>|<font color=blue>usage<font color=grey>|<font color=red>…<font color=grey>|<font color=blue>all priviledges<font color=red>}</font> | ||
<font color=blue>on <font color=red>{<font color=blue>table<font color=grey>|<font color=blue>database<font color=grey>|<font color=blue>view<font color=grey>|<font color=blue>procedure<font color=grey>|<font color=blue>function<font color=grey>|<font color=red>…} имя</font> | <font color=blue>on <font color=red>{<font color=blue>table<font color=grey>|<font color=blue>database<font color=grey>|<font color=blue>view<font color=grey>|<font color=blue>procedure<font color=grey>|<font color=blue>function<font color=grey>|<font color=red>…} имя</font> | ||
<font color=blue>from <font color=red>{пользователь<font color=grey>|<font color=blue>group <font color=red>группа<font color=grey>|<font color=blue>public<font color=red>}</font> | <font color=blue>from <font color=red>{пользователь<font color=grey>|<font color=blue>group <font color=red>группа<font color=grey>|<font color=blue>public<font color=red>}</font> | ||
− | <font color=red>[<font color=blue>cascade<font color=grey>|<font color=blue>restrict<font color=red>]<font color= | + | <font color=red>[<font color=blue>cascade<font color=grey>|<font color=blue>restrict<font color=red>]<font color=black> |
− | + | ||
− | <font color= | + | Если группа или пользователь, для которого удаляется право, наделил им кого-то еще, необходимо указать, каким образом следует отзывать право у всех его получивших: |
− | + | * <code>cascade</code> также забирает право у всей цепочки; | |
+ | * <code>restrict</code> выдаст ошибку, если право было делегировано; | ||
+ | Для указания метода, следует использовать опцию: | ||
+ | <font color=red>[<font color=blue>cascade<font color=grey>|<font color=blue>restrict<font color=red>]<font color=black> | ||
+ | |||
+ | |||
+ | Для того, чтобы отозвать не само право, а возможность его делегировать, следует использовать опцию: | ||
+ | <font color=red>[<font color=blue>grant option for<font color=red>]<font color=black> | ||
=== Примеры === | === Примеры === | ||
− | + | Удалить у группы менеджеров право вставки в таблицу товаров с отзывом этого права у всех, кто получил его по цепочке от менеджеров: | |
− | + | <font color=blue>revoke insert on <font color=black>Items <font color=blue>from group <font color=black>ShopManagers <font color=blue>cascade<font color=grey>;<font color=black> | |
− | <font color=blue>revoke insert on <font color=black>Items | ||
− | |||
− | + | Удалить публичное право обновления таблицы товаров: | |
<font color=blue>revoke update on <font color=black>Items <font color=blue>from public<font color=grey>;<font color=black> | <font color=blue>revoke update on <font color=black>Items <font color=blue>from public<font color=grey>;<font color=black> | ||
Строка 101: | Строка 107: | ||
=== Пример === | === Пример === | ||
− | + | Создать представление, состоящее только из товаров из отдела мебели: | |
<font color=blue>create view <font color=black>FurnitureItems <font color=blue>as</font> | <font color=blue>create view <font color=black>FurnitureItems <font color=blue>as</font> | ||
<font color=blue>select <font color=gray>* <font color=blue>from <font color=black>Items</font> | <font color=blue>select <font color=gray>* <font color=blue>from <font color=black>Items</font> | ||
− | <font color=blue>where <font color=black> | + | <font color=blue>where <font color=black>ItemId <font color=blue>in</font> |
<font color=gray>(<font color=blue>select <font color=black>DId <font color=blue>from <font color=black>Departments <font color=blue>where <font color=black>DId <font color=gray>= <font color=green>'Furniture'<font color=gray>)<font color=black> | <font color=gray>(<font color=blue>select <font color=black>DId <font color=blue>from <font color=black>Departments <font color=blue>where <font color=black>DId <font color=gray>= <font color=green>'Furniture'<font color=gray>)<font color=black> | ||
− | + | Выдать все права на это представление менеджеру отдела мебели: | |
− | <font color=blue>grant all priviledges on <font color=black>FurnitureItems <font color=blue>to <font color=black>FurnitureManager <font color=gray>;<font color=black> | + | <font color=blue>grant all priviledges on <font color=black>FurnitureItems <font color=blue>to <font color=black>FurnitureManager<font color=gray>;<font color=black> |
== Спроецированная таблица == | == Спроецированная таблица == | ||
Строка 114: | Строка 120: | ||
=== Пример === | === Пример === | ||
− | + | Создать представление, состоящее только из артикулов, наименований и цветов товаров (без данных о расположении на складе, поставщике, сертификации и тд): | |
<font color=blue>create view <font color=black>PublicItems <font color=blue>as</font> | <font color=blue>create view <font color=black>PublicItems <font color=blue>as</font> | ||
− | <font color=blue>select <font color=black>ItemId<font color=gray>, <font color=black>Name<font color=gray>, <font color=black>Color | + | <font color=blue>select <font color=black>ItemId<font color=gray>, <font color=black>Name<font color=gray>, <font color=black>Color</font> |
<font color=blue>from <font color=black>Items | <font color=blue>from <font color=black>Items | ||
− | + | Выдать публичное право выборки для созданного представления: | |
<font color=blue>grant select on <font color=black>PublicItems <font color=blue>to <font color=black>public<font color=grey>;<font color=black> | <font color=blue>grant select on <font color=black>PublicItems <font color=blue>to <font color=black>public<font color=grey>;<font color=black> | ||
Строка 128: | Строка 134: | ||
=== Пример === | === Пример === | ||
− | + | Создать представление, позволяющее смотреть только на средние баллы студентов, а не на конкретные значения по предметам: | |
− | |||
<font color=blue>create view <font color=black>StudentPoints <font color=blue>as</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>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=blue>from <font color=black>Students <font color=blue>natural join <font color=black>Marks | ||
− | + | Выдать публичное право выборки на созданное представление: | |
<font color=blue>grant select on <font color=black>StudentPoints <font color=blue>to public<font color=grey>;<font color=black><font color=black> | <font color=blue>grant select on <font color=black>StudentPoints <font color=blue>to public<font color=grey>;<font color=black><font color=black> | ||
Текущая версия на 19:08, 4 сентября 2022
Содержание
Схемы управления доступом
Дискреционная схема
Определение: |
Дискреционная (или избирательная) схема — политика, в рамках которой поддерживаются списки, содержащие информацию о том, кто и к чему имеет доступ. |
В данной схеме используются следующие понятия:
- Объекты и набор прав для них, не связанных между собой (например, данные и права на добавление, удаление, чтение, обновление и тп);
- Пользователи, обладающие какими-то правами на какие-то объекты;
- Группы пользователей и права, присваиваемые всем членам этих групп в дополнение к их собственным;
Мандатная схема
Определение: |
Мандатная схема — политика, в рамках который к данным и тем, кто имеет к ним доступ, присылаются классификационные уровни. |
Уровни доступа располагаются по возрастанию: от общедоступного
до самого защищенного . Такие уровни присваиваются как пользователям, так и объектам.С учетом уровней, возможность выполнения операций определяется по следующим правилам:
- Чтение: ;
- Изменение: . Разрешение изменения менее защищенных данных может повлечь случайное рассекречивание информации, если, например, изменения на уровне делаются на основе информации с ;
- Добавление: ;
Пользователи и группы
Определение: |
Группа (в рамках стандарта) — набор пользователей; иерархии групп не предполагается. |
В рамках стандарта существуют пользователи и группы, но не существует стандартных способов управления ими.
Управление пользователями
Наиболее общепринятый синтаксис (не 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]
Можно добавить возможность наделять правом других пользователей и групп с помощью опции:
[with grant option]
Примеры
Выдача всех прав на таблицу товаров группе менеджеров с возможностью наделения этим правом:
grant all priviledges on Items to group ShopManagers with grant option;
Выдача публичного права на выборку из таблицы товаров:
grant select on Items 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
выдаст ошибку, если право было делегировано;
Для указания метода, следует использовать опцию:
[cascade|restrict]
Для того, чтобы отозвать не само право, а возможность его делегировать, следует использовать опцию:
[grant option for]
Примеры
Удалить у группы менеджеров право вставки в таблицу товаров с отзывом этого права у всех, кто получил его по цепочке от менеджеров:
revoke insert on Items from group ShopManagers cascade;
Удалить публичное право обновления таблицы товаров:
revoke update on Items from public;
Владелец объекта
Определение: |
Владелец объекта (базы, таблицы, схемы) — пользователь, создавший объект.
|
Передача права владения объектом:
alter {table|schema|database|…} owner to пользователь
Представления и права
Использование представлений дает возможность выдавать права не на всю таблицу целиком, а только на ее часть, позволяя производить более тонкую настройку доступа.
Фильтрованная таблица
Создается представление только для части кортежей, для которой определяются права. Данное представление может быть изменяемым.
Пример
Создать представление, состоящее только из товаров из отдела мебели:
create view FurnitureItems as select * from Items where ItemId in (select DId from Departments where DId = 'Furniture')
Выдать все права на это представление менеджеру отдела мебели:
grant all priviledges on FurnitureItems to FurnitureManager;
Спроецированная таблица
Создается представление только для части атрибутов, для которой определяются права. Данное представление может быть изменяемым.
Пример
Создать представление, состоящее только из артикулов, наименований и цветов товаров (без данных о расположении на складе, поставщике, сертификации и тд):
create view PublicItems as select ItemId, Name, Color from Items
Выдать публичное право выборки для созданного представления:
grant select on PublicItems to public;
Агрегированная таблица
Создается представление, содержащее агрегированные данные вместо базовых, для которых определяются права. Данное представление, как правило, не является изменяемым.
Если, при этом, пользователь имеет право на изменение хотя бы части агрегируемых данных, он может проводить дифференцированные атаки, которые позволят определить частично или полностью исходные данные.
Пример
Создать представление, позволяющее смотреть только на средние баллы студентов, а не на конкретные значения по предметам:
create view StudentPoints as select SId, avg(points) from Students natural join Marks
Выдать публичное право выборки на созданное представление:
grant select on StudentPoints to public;
См. также
Литература
- https://www.kgeorgiy.info/courses/dbms/
- Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом "Вильяме", 2005. — 1328 с.
- Gulutzan P., Pelzer T.(1999) SQL-99 complete, really. Gilroy,CA:CMP Books