361.51K
Category: databasedatabase

контроль доступа

1.

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

2.

Аутентификация и авторизация пользователей в базах данных (БД) — это два
взаимосвязанных процесса, обеспечивающих контроль доступа к данным и выполнение
операций в системе.
Каждый пользователь проходит два этапа проверки системы безопасности при доступе к данным:
аутентификация и получение доступа к данным.
Аутентификация относится к уровню работы всего сервера СУБД. На первом этапе пользователь
идентифицирует себя с помощью логического имени (login) и пароля (password).
Авторизация — это предоставление прав (привилегий), которые позволяют пользователю иметь
законный доступ к системе или её объектам. Она определяет, какие действия пользователь может
выполнять в БД.
Управление авторизацией осуществляется с помощью:
Ролей базы данных
Явных разрешений
Дополнительные аспекты
Хэширование паролей.
Шифрование данных.
Аудит действий пользователей.
login
passw
ord
учетная запись

3.

режимы аутентификации
Аутентификация ОС
В процессе установки сервера
баз данных по умолчанию
назначается режим
аутентификации, при котором
пользователи, успешно
прошедшие проверку
подлинности при входе в
операционную систему,
автоматически получают право
соединения с сервером.
Аутентификация SQL Server
Предполагает дополнительную
регистрацию пользователей
средствами сервера баз данных,
выдачу им имен учетных записей и
паролей с последующей проверкой
подлинности пользователей при их
соединении с сервером

4.

MySQL :: MySQL 8.4 Reference Manual :: 8.2 Access Control and Account Management
https://dev.mysql.com/doc/refman/8.4/en/user-names.html
MySQL хранит учетные записи в таблице user системной базы данных mysql . Учетная запись
определяется по имени пользователя и клиентскому хосту или хостам, с которых пользователь может
подключаться к серверу.
У учетной записи также могут быть учетные данные для аутентификации, например пароль. Учетные
данные обрабатываются плагином аутентификации учетной записи. MySQL поддерживает несколько
плагинов аутентификации. Некоторые из них используют встроенные методы аутентификации, а другие
позволяют выполнять аутентификацию с помощью внешних методов.
Некоторые методы аутентификации в MySQL:
caching_sha2_password — по умолчанию в MySQL 8, использует алгоритм SHA-2 с 256-битным
шифрованием пароля;
auth_socket — аутентификация через локальный Unix-сокет;
внешние методы аутентификации (PAM, идентификаторы входа в Windows, LDAP, Kerberos).
Для аутентификации клиентских подключений к учетным записям, использующим встроенные методы
аутентификации, сервер использует пароли, хранящиеся в таблице user . Эти пароли отличаются от
паролей для входа в операционную систему.
Пароли, хранящиеся в таблице user, шифруются с использованием алгоритмов, специфичных для
конкретного плагина.

5.

СУБД должна поддерживать механизм, гарантирующий, что доступ к базе
данных смогут получить только те пользователи, которые имеют
соответствующее
разрешение.
Язык
SQL
включает
операторы GRANT и REVOKE, предназначенные для организации защиты
таблиц в базе данных.
Механизм защиты построен на использовании идентификаторов
пользователей, предоставляемых им прав владения и привилегий.
Каждый созданный в среде SQL объект имеет своего владельца, который
изначально является единственной персоной, знающей о существовании
данного объекта и имеет право выполнять с ним любые операции.

6.

операторы GRANT и REVOKE
-- Создаем пользователя, который может подключаться только с локального хоста
-- Создаем пользователя, который может подключаться с любого хоста
--Выводим созданных пользователей
--Наделяем специальными правами пользователя в конкретной базе к конкретной таблице

7.

операторы GRANT и REVOKE
--Отзываем все привелегии, показываем результат
--переименовываем пользователя
-- производим смену пароля

8.

Двухуровневая настройка доступа к данным включает два ключевых этапа контроля доступа,
которые обеспечивают управление правами пользователей и условиями подключения.
Первый уровень: настройка сетевых интерфейсов
Этот уровень определяет, на каких сетевых интерфейсах MySQL будет слушать подключения.
Ключевой параметр — bind-address в конфигурационном файле сервера ( /etc/my.cnf). По
умолчанию bind-address установлен на 127.0.0.1 (localhost), что ограничивает доступ локальными
подключениями. Для удалённого доступа можно изменить значение на 0.0.0.0 (доступ со всех IP)
или указать конкретный IP-адрес.
Второй уровень: система привилегий
После установления соединения сервер проверяет права пользователя на выполнение конкретных
запросов. Эта проверка происходит на двух этапах:
• Верификация соединения. Сервер устанавливает соединение только в том случае, если находит
в таблице user запись, где имя хоста и имя пользователя совпадают с введёнными, а также
указан правильный пароль.
• Верификация запросов. Для каждого поступающего запроса сервер проверяет, есть ли у
пользователя достаточные привилегии для выполнения операции (например, SELECT, INSERT,
UPDATE, DELETE) в зависимости от типа операции и уровня доступа, который требуется
предоставить.

9.

Контроль доступа, этап 1: проверка подключения
При попытке подключиться к серверу MySQL сервер принимает или отклоняет соединение в
зависимости от следующих условий:
• Сервер сначала проверяет учетные данные, а затем состояние блокировки учетной записи. Если на
любом из этих этапов произойдет сбой, сервер полностью заблокирует доступ. В противном случае
сервер принимает соединение, переходит на второй этап и ожидает запросов.
• Сервер выполняет проверку подлинности и учетных данных с помощью столбцов в таблице user,
принимая соединение только при соблюдении следующих условий:
• Имя хоста и имя пользователя клиента соответствуют столбцам Host и User в некоторой user строке
таблицы. Правила, определяющие допустимые значения Host и User, см. в разделе 8.2.4 «Указание
имен учетных записей».
• Клиент предоставляет учетные данные, указанные в строке (например, пароль), как указано в
столбце authentication_string . Учетные данные обрабатываются с помощью плагина аутентификации,
указанного в столбце plugin .
• Состояние блокировки указано в столбце account_locked (если учётная запись разблокирована, в
должно быть значение 'N'). Блокировку учетной записи можно установить или изменить с помощью
операторов CREATE USER или ALTER USER.

10.

Если возможно несколько совпадений, сервер должен определить, какое из них
использовать. Эта проблема решается следующим образом:
Всякий раз, когда сервер считывает таблицу user в память, он сортирует строки.
Когда клиент пытается подключиться, сервер просматривает строки в отсортированном порядке.
Сервер использует первую строку, которая соответствует имени хоста и имени пользователя клиента.
Сервер использует правила сортировки, согласно которым строки с наиболее специфичными значениями Host
располагаются в начале.
Наиболее точными являются буквальные IP-адреса и имена хостов.
Чтобы узнать, какую учетную запись использовал сервер для аутентификации используется функция
CURRENT_USER() . (См. раздел 14.15 «Информационные функции».) Возвращает комбинацию имени
пользователя и имени хоста, которая использовалась для аутентификации в текущем сеансе. Это значение
соответствует пользовательской учётной записи MySQL, определяющей права доступа

11.

Контроль доступа, этап 2: проверка запроса
После того как сервер принимает соединение, начинается второй этап контроля доступа. Для
каждого запроса, отправленного через соединение, сервер определяет операцию а затем
проверяет, достаточны ли привилегии. Эти привилегии могут быть получены из любой из таблиц
user, global_grants, db, tables_priv, columns_priv, или procs_priv . ( 8.2.3 «Таблицы грантов», в
котором перечислены столбцы, присутствующие в каждой таблице грантов.)
• Таблицы user и global_grants предоставляют глобальные привилегии, независимо от базы
данных по умолчанию.
• Таблица db предоставляет привилегии для конкретной базы данных.
• Таблицы tables_priv, columns_priv и procs_priv предоставляют привилегии для конкретных
таблиц, столбцов и процедур.
• Сервер использует отсортированные таблицы для проверки каждого поступающего запроса.
• Для запросов, связанных с базой данных (INSERT, UPDATE и т. д.), сервер сначала проверяет
глобальные привилегии пользователя в строке таблицы user (за вычетом ограничений,
налагаемых частичным отзывом привилегий). Если строка разрешает запрошенную операцию,
доступ предоставляется. Если глобальных привилегий в таблице user недостаточно, сервер
определяет привилегии пользователя для конкретной базы данных в таблице db.

12.

Контроль доступа, этап 2: проверка запроса
Определив привилегии для конкретной базы данных, предоставленные строками таблицы db, сервер
добавляет их к глобальным привилегиям, предоставленным таблицей user. Если результат позволяет
выполнить запрошенную операцию, доступ предоставляется. В противном случае сервер
последовательно проверяет права доступа пользователя к таблицам и столбцам в таблицах tables_priv
и columns_priv, добавляет их к правам доступа пользователя и в зависимости от результата
предоставляет или отказывает в доступе. Для операций с хранимыми процедурами сервер
использует таблицу procs_priv, а не tables_priv и columns_priv.
В булевой форме приведенное выше описание того, как рассчитываются привилегии пользователя,
можно сформулировать следующим образом:
• global privileges
• OR database privileges
• OR table privileges
• OR column privileges
• OR routine privileges

13.

Уровни привилегий
Администраторы могут создавать и удалять привилегии для нескольких уровней доступа:
• Глобальный уровень — привилегии распространяются на все базы данных (таблица mysql.user).
• Уровень базы данных — привилегии распространяются только на таблицы и записи указанной базы
данных (таблицы mysql.db и mysql.host).
• Уровень таблиц — привилегии распространяются только на записи одной таблицы (таблица
mysql.tables_priv).
• Уровень столбцов — привилегии распространяются только на указанный столбец определённой
таблицы (таблица mysql.columns_priv).
Привилегии также различаются в зависимости от того, являются ли они статическими (встроенными в
сервер) или динамическими (определяемыми во время выполнения). Статичность или динамичность
привилегии влияет на возможность ее предоставления учетным записям и ролям пользователей
Таблицы с именами статических и динамических привилегий, используемые в операторах GRANT и
REVOKE, а также имена столбцов, связанных с каждой привилегией в таблицах грантов, и контекст, в
котором применяется привилегия https://dev.mysql.com/doc/refman/8.4/en/privileges-provided.html

14.

--показать полный список привелегий

15.

Статичность и динамичность привилегий — это характеристики,
которые определяют способ их определения и доступности в системе.
Статические привилегии — это привилегии,
которые встроены в сервер. Они всегда доступны
для предоставления учётным записям пользователей
и не могут быть отменены. Например,
SELECT — право на выборку данных.
INSERT — право на добавление записей.
ALTER — право на изменение структуры таблиц.
CREATE — право на создание баз данных и таблиц.
CREATE USER — административное право на
создание пользователей.
FILE — право на работу с файлами.
PROCESS — право на просмотр процессов.
RELOAD — право на перезагрузку привилегий.
SHOW DATABASES — право на просмотр списка
баз данных.
Динамические привилегии — это привилегии,
которые определяются во время выполнения. Их
доступность зависит от того, был ли включён
компонент или подключаемый модуль, который их
реализует. Если компонент не активирован,
динамические привилегии недоступны.
Применяются только на глобальном уровне.
Например, BACKUP_ADMIN,
SYSTEM_VARIABLES_ADMIN,
REPLICATION_APPLIER — привилегии,
появившиеся в MySQL 8.0, которые заменяют
«монолитный» SUPER и позволяют выдавать только
необходимые полномочия для административных
задач.

16.

Роль — это именованная совокупность привилегий. Как и учетные записи пользователей,
роли могут получать и лишаться привилегий.
Учетной записи пользователя можно назначить роли, которые предоставляют учетной записи
соответствующие привилегии. Это позволяет назначать учетным записям наборы привилегий и
является удобной альтернативой предоставлению отдельных привилегий как с точки зрения
понимания желаемых назначений привилегий, так и с точки зрения их реализации.
Список возможностей управления ролями в MySQL:
• CREATE ROLE и DROP ROLE создают и удаляют роли.
• GRANT и REVOKE назначают права, чтобы отозвать права у учетных записей и ролей
пользователей.
• SHOW GRANTS отображает назначения прав и ролей для учетных записей и ролей пользователей.
• SET DEFAULT ROLE указывает, какие роли учетных записей активны по умолчанию.
• SET ROLE изменяет активные роли в текущем сеансе.
• Функция CURRENT_ROLE() отображает активные роли в текущем сеансе.
• Системные переменные mandatory_roles и activate_all_roles_on_login позволяют определять
обязательные роли и автоматически активировать предоставленные роли при входе пользователей на
сервер
• Описание отдельных операторов управления ролями (включая привилегии, необходимые для их
использования) см. в разделе 15.7.1 «Операторы управления учетными записями».

17.

методы авторизации, которые можно использовать с ролями в MySQL:
• Определение ролей, которые будут активироваться по умолчанию. Для этого используется
команда SET DEFAULT ROLE.
• Изменение активных ролей во время сессии. Для этого применяется команда SET ROLE.
Можно активировать все роли, которые были назначены учётной записи, или все роли с
определёнными исключениями.
• Отключение всех ролей. Для этого используется указание NONE: SET ROLE NONE. В
результате для сессии останутся только привилегии, назначенные учётной записи пользователя.
• Определение обязательных ролей. Для этого используются системные переменные, например,
mandatory_roles.
• Автоматическая активация назначенных ролей. Для этого используется переменная
activate_all_roles_on_login. Когда её значение установлено в true, при входе пользователя в
систему автоматически активируются все роли, связанные с учётной

18.

Управление Ролями
Назначение серверных ролей в MySQL выполняется с помощью специальных SQL-инструкций и системных
инструментов.
Для создания ролей используется инструкция CREATE ROLE. Синтаксис:
CREATE ROLE [IF NOT EXISTS] [role [, role] ...];
Например:
CREATE ROLE 'admin', 'developer';
При создании роль блокируется, у неё нет пароля, и ей назначается плагин аутентификации по умолчанию. Для
создания и управления ролями нужна привилегия CREATE ROLE или CREATE USER, а для назначения
привилегий ролям — привилегия GRANT OPTION
Если включена системная переменная read_only, дополнительно требуется привилегия CONNECTION_ADMIN .
Если включена системная переменная activate_all_roles_on_login, все явно предоставленные и обязательные роли
автоматически активируются при подключении пользователей к серверу.
Сервер считает, что обязательная роль предоставлена всем пользователям, поэтому ее не нужно явно
предоставлять какой-либо учетной записи. Обязательные роли при запуске сервера указываются
mandatory_roles в файле my.cnf.
Роли можно не только назначать, но и отменять. REVOKE role FROM user;
Роли, указанные в значении системной переменной mandatory_roles , не могут быть отозваны.
REVOKE Также можно применить к роли, чтобы изменить предоставленные ей привилегии. Это повлияет не
только на саму роль, но и на все учетные записи, которым назначена эта роль.

19.

Возможности управления паролями:
https://dev.mysql.com/doc/refman/8.4/en/password-management.html
Срок действия пароля, требующий периодической смены паролей.
Ограничения на повторное использование паролей, предотвращающие повторное использование
старых паролей.
Проверка пароля, требующая, чтобы при смене пароля указывался текущий пароль, который нужно
заменить.
Двойные пароли, позволяющие клиентам подключаться с помощью основного или дополнительного
пароля.
Оценка надежности пароля, требующая использования надежных паролей.
Генерация случайного пароля в качестве альтернативы использованию буквальных паролей,
указанных администратором.
Отслеживание неудачных попыток ввода пароля для временной блокировки учетной записи после
слишком большого количества неудачных попыток входа с неправильным паролем.

20.

Схемы используются в модели безопасности
для упрощения взаимоотношений между
пользователями и объектами.
Каждая база данных имеет схему по умолчанию.
Схема — это контейнер для объектов базы данных, которые могут включать таблицы,
представления, хранимые процедуры, функции, индексы и другие структурные элементы.
Она позволяет логически группировать связанные объекты и отделять их от других объектов
в той же базе данных. Это помогает в организации, обеспечении безопасности и контроле
доступа.
Визуально схему базы данных можно представить в виде ER-диаграммы (Entity-Relationship
Diagram).
Особенности схем :
Каждый объект в пределах схемы должен иметь уникальное имя, но одно и то же имя может
существовать в разных схемах.
Привилегии. Доступ к объектам в схеме можно контролировать на уровне схемы — предоставлять
или отменять разрешения для всех объектов внутри этой схемы.
Создание и управление. Для создания схемы в MySQL используется оператор CREATE SCHEMA,
аналогичный CREATE DATABASE в других СУБД.

21.

В PostgreSQL права доступа управляются с помощью ролей (roles). Для просмотра
привилегий конкретного пользователя можно использовать запрос SELECT * FROM
information_schema.role_table_grants WHERE grantee =
В MySQL информация о привилегиях
хранится в системных таблицах базы данных
mysql. Для просмотра прав доступа
используется команда SHOW GRANTS.
Также можно запросить таблицу
information_schema.user_privileges, чтобы
получить список привилегий для конкретных
пользователей

22.

https://dev.mysql.com/doc/refman/8.4/en/grant-tables.html#grant-tables-user-db
В процессе установки MySQL в таблицах грантов создается начальная root учетная запись, как описано в
разделе 2.9.4 «Защита начальной учетной записи MySQL, где также рассказывается, как присвоить ей пароль.
Настройка, изменение и удаление учетных записей MySQL- с помощью таких команд, как CREATE USER,
DROP USER, GRANT и REVOKE. См. раздел 8.2.8 «Добавление учетных записей, назначение привилегий и
удаление учетных записей» и раздел 15.7.1 «Инструкции по управлению учетными записями».
Системная база данных mysql включает в себя несколько таблиц с разрешениями, которые
содержат информацию об учетных записях пользователей и их привилегиях.
Таблицы грантов для пользователей и баз данных
Таблицы грантов tables_priv и columns_priv
Таблица грантов procs_priv
Таблица грантов proxies_priv
Таблица грантов global_grants
Таблица грантов default_roles
Таблица грантов role_edges
Таблица грантов password_history

23.

контрольные вопросы
Перечислите основные принципы защиты данных, обеспечивающие безопасность хранения информации.
В чем заключается понятие роли при работе с многопользовательскими СУБД?
Какие операторы определены в стандарте SQL для предоставления и отмены привилегий?
Какой параметр определяет режим, позволяющий передавать права другим пользователям?
В чем заключаются отличия в синтаксисе оператора GRANT для команд UPDATE и REFERENCES?
Каким образом задается привилегия на запуск хранимых процедур?
В чем заключается двухуровневая настройка организации доступа к данным ?
Чем отличаются серверные роли и роли для записей пользователя БД ? Приведите примеры прав для
серверной роли и роли для учетной записи пользователя БД.
9. Каким образом выполняется назначение серверных ролей ?
10. Каким образом выполняется настройка учетной записи ?
11. Какой объект сервера используется для отображения прав доступа пользователей к БД?
1.
2.
3.
4.
5.
6.
7.
8.
English     Русский Rules