Безопасная система

пятница, нояб. 7, 2025 | 6 минут чтения

Безопасная система

Что такое безопасная система?

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

CIA Triad

  • Конфиденциальность (Confidentiality)
  • Целостность (Integrity)
  • Доступность (Availability)

Определение пользователя

  • Идентификация - процесс, когда информационная система определяет, существует конкретный пользователь или нет. Делает она это с помощью идентификатора. Идентификатором может быть логин, электронная почта, номер телефона или другой признак, который есть только у одного пользователя.
  • Аутентификация - процесс, когда пользователь вводит ключ, например пароль или пин-код, подтверждая своё право на доступ к той или иной учётной записи и хранящейся в ней информации
  • Авторизация - процесс определения того, какие действия позволено совершать аутентифицированному пользователю.

Идентификация

  • То, что субъект знает
  • То, что субъекту принадлежит
  • То, что является неотьемлемой характеристикой субъекта

Многофакторная идентификация

  • Если для входа требуются пароль и, например, ответ на секретный вопрос (который тоже является “знанием”), то это не многофакторная аутентификация, а всего лишь двухэтапная проверка в рамках одного фактора.

Авторизация

Дискретный уровень доступа

  • Каждый объект имеет владельца

  • Владелец полностью контролирует доступ к своему объекту

  • Права доступа определяются на основе списков контроля доступа (ACL)

  • SELECT *

  • FROM pg_class

Виды привилегий

  • SYSTEM PRIVILEGES
  • DATABASE PRIVILEGES
  • SCHEMA PRIVILEGES
  • TABLE PRIVILEGES
  • COLUMN PRIVILEGES
  • ROW-LEVEL PRIVILEGES

Модель доступа: Владелец объекта

  • B PostgreSQL каждый объект базы данных имеет владельца, который создаёт этот объект. Этот владелец обладает полным контролем над объектом.
  • По умолчанию владелец объекта может передавать свои права другим ролям, позволяя им выполнять определённые действия с объектом.

Модель доступа: Пользователи и группы

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

Роли

  • B PostgreSQL понятие “пользователь” является частным случаем роли. Каждая роль может иметь или не иметь возможность входа в систему (login privilege). Если у роли установлено свойство LOGIN, она может использоваться как учетная запись пользователя.

  • Роли могут быть членами других ролей. Это позволяет организовать группы пользователей - например, создать роль developers, которой будут принадлежать все разработчики, и назначить этой роли общие привилегии.

  • Создание CREATE ROLE {Name) {attr1, attr2, …}

  • Изменение ALTER ROLE developer WITH PASSWORD ’newsecret';

  • LOGIN

  • SUPERUSER

  • CREATEDB

  • CREATEROLE

  • PASSWORD ‘secret’

Наследование привилегий

  • роль, являющаяся членом другой роли, по умолчанию автоматически наследует все привилегии (права доступа) этой родительской роли.
  • GRANT role1 to role2
  • REVOKE role1 FROM role2

Смена владельца

  • ALTER {obj} OWNER TO {role1}
  • Владеет роли и роли включающиеся в нее

Привилегии таблиц

  • SELECT
  • INSERT
  • UPDATE
  • REFERENCES
  • DELETE
  • TRUNCATE
  • TRIGGER

Привилегии БД

  • CREATE
  • CONNECT
  • TEMPERARY

%%Оффтоп Truncate

  • TRUNCATE не проверяет каждую строку для удаления, а просто освобождает данные, удаляя содержимое таблицы целиком.
  • Вместо того, чтобы логировать каждое удаление строки, TRUNCATE записывает в журнал меньший объем информации.
  • При использовании TRUNCATE не вызываются триггеры, определенные для операций удаления.
  • Если TRUNCATE выполняется в транзакционном блоке, то операция может быть отменена командой ROLLBACK до фиксации транзакции.%%

Привилегии схем

  • CREATE
  • USAGE
  • Права доступа к схеме влияют на возможность создания новых объектов, но сами по себе не контролируют доступ к уже существующим объектам. Для этого необходимо назначать соответствующие привилегии непосредственно на уровне объектов

Состояние

Strict

Diagnostics

Подпрограммы PL / pgSQL

Используя OUT аргумент

Условные операторы

  • IF
  • CASE (не возвращает значение)

IF

Оффтоп

Схема public

  • Создаётся по умолчанию при создании новой базы данных.
  • Объекты, в ней, доступны всем пользователям, если не настроены отдельные ограничения.
  • При создании объектов не указана какая-либо другая схема, они автоматически создаются в public.

Модель доступа

Привилегии БД

  • CREATE
  • CONNECT
  • TEMPERARY

Оффтоп

Стандартные БД

  • Когда создаётся новая база данных без явного указания шаблона, используется база данных template1.
  • Template - это «чистая» база данных, которая не изменялась после установки PostgreSQL. Она содержит минимальное количество объектов и служит эталоном.

Привилегии схем

  • CREATE
  • USAGE
  • Права доступа к схеме влияют на возможность создания новых объектов, но сами по себе не контролируют доступ к уже существующим объектам. Для этого необходимо назначать соответствующие привилегии непосредственно на уровне объектов

Мандатный доступ

Мандатный уровень доступа (Mandatory Access Control - MAC)

используется в системах, где требуется высший уровень безопасности и централизованный контроль. В отличие от дискреционной модели, где владелец решает, кому предоставить доступ, в МАС доступ определяется системными политиками.

  • “Нет права давать права”
  • Протоколирование ВСЕХ действий
  • Защита от копирования

Шифрование БД

  • прозрачное шифрование
  • на уровне столбцов
  • на уровне приложения

Угроза действий привилегированных пользователей

  • Принцип разделения обязанностей
  • Принцип наименьших привилегий

Для чего они используются

Циклы

  • For
  • While
  • Loop

Циклы имеют операторы ЕХІТ и CONTINUE

For

Триггеры

Используются когда мы хотим действия в момент изменения данных

  • BEFORE/AFTER - Выполняется перед действием или после. Если используем перед, то мы можем менять данные.
  • FROM - на какую то таблицу
  • FOR ROW/STATEMENT - На весь запрос целиком или на каждую строчку. У стейтмент триггера нет информации об измененных данных
  • WHEN - содержит условие, определяющее будет ли вызываться функция или нет.

Переменные триггера

  • NEW - Содержит новую строку
  • OLD - Содержит старую строку
  • TG_NAME - Содержит название триггера
  • TG_OP - Содержит название операции
  • TG_TABLE_NAME - Содержит название таблицы

Пример триггера

Плюсы

  • Инкапсулирование функциональности
  • Изоляция пользователей от таблиц.
  • В некоторых случаях ускорение выполнения (Предкомпиляция)

Минусы

  • Повышение нагрузки на БД
  • Миграция между СУБД вызывает проблемы. Обратной совместимости нет совсем.

В чем отличие?

• Функция имеет возвращаемый тип и возвращает значение• Может не возвращать значение или возвращать через OUTPUT параметры
• Использование DML запросов
внутри функции невозможно. В функциях разрешены только SELECT-запросы
• Использование DML-запросов возможно в хранимой процедуре.
• Вызов хранимой процедуры из функции невозможно• Использование или же управление
транзакциями возможно в хранимой процедуре
• Вызов функции внутри SELECT запросов возможен• Вызов хранимой процедуры из SELECT запросов невозможно

Создание функции

Функции

  • Функции могут состоять из нескольких операторов SQL.
  • Возвращается значение из RETURN
  • Нельзя использовать операторы управления транзакции (BEGIN, COMMIT, ROLLBACK)
  • Нельзя использовать служебные команды (CREATE INDEX)

Типы переменных

  • IN
  • OUT
  • INOUT
  • RETURN

Привилегии доступа

  • Definer - Создателя
  • Invoker - Вызывающего

  • ! это перегрузка процедур, а не функций и ретурна нет (в процедурах), только ин и аут

Категории изменчивости

  • Volatile - возвращаемое значение может быть произвольно менять на одних и тех же входных.
  • Stable - Значение не меняется в рамках одного оператора, функция не может менять таблицы (Оптимизатор может кэшировать результаты в пределах команды)
  • Immutable - значение не меняется, функция детерминирована, функция не может менять таблицы (Можно вызывать на этапе планирования запроса)

PL/pgSQL

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

  • может быть использован для создания функций, процедур и триггеров
  • добавляет структуры управления к языку SQL
  • наследует все пользовательские типы, функции, процедуры и операторы
  • прост в использовании

Структура

  • Метка
  • Секция объявления переменных
  • Операторы
  • Обработка исключительных ситуаций

Форма блока

🌱 Авторы:
salt-caramel
notakeith