Язык структурированных запросов для работы с СУБД PostgreSQL. Учебное пособие
.pdfМинистерство науки и высшего образования Российской Федерации
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
__________________________________________________________________________
Г. В. ТРОШИНА, С. А. МЕНЖУЛИН
ЯЗЫК СТРУКТУРИРОВАННЫХ ЗАПРОСОВ ДЛЯ РАБОТЫ
с СУБД PostgreSQL
Утверждено Редакционно-издательским советом университета в качестве учебного пособия
НОВОСИБИРСК
2024
УДК 004.655.3(075.8) Т766
Рецензенты:
д-р техн. наук, доцент С. П. Ильиных д-р техн. наук, доцент Л. К. Бобров
Работа подготовлена на кафедре вычислительной техники
Трошина Г. В.
Т766 Язык структурированных запросов для работы с СУБД PostgreSQL : учебное пособие / Г. В. Трошина, С. А. Менжулин. – Новосибирск : Изд-во НГТУ, 2024. – 82 с.
ISBN 978-5-7782-5152-6
Представлены основные приемы использования языка структурированных запросов SQL при создании баз данных в среде PostgreSQL. Учебное пособие предназначено для студентов, обучающихся по направлениям 09.03.01 – «Информатика и вычислительная техника», 09.03.04 – «Программная инженерия».
|
УДК 004.655.3(075.8) |
ISBN 978-5-7782-5152-6 |
© Трошина Г. В., Менжулин С. А., 2024 |
|
© Новосибирский государственный |
|
технический университет, 2024 |
ОГЛАВЛЕНИЕ |
|
Предисловие............................................................................................................ |
4 |
1. Основы работы в СУБД PostgreSQL ................................................................. |
5 |
1.1. Создание новых пользователей.................................................................. |
5 |
1.2. Создание баз данных................................................................................... |
9 |
1.3. Создание таблиц баз данных..................................................................... |
12 |
1.4. Вставка данных в таблицы........................................................................ |
18 |
1.5. Модификация таблиц и полей.................................................................. |
20 |
1.6. Редактирование данных полей таблиц..................................................... |
24 |
1.7. Объединение таблиц INHERITS............................................................... |
28 |
1.8. Создание ограничений для таблиц и полей............................................. |
29 |
1.9. Построение запросов................................................................................. |
35 |
1.10. Представления.......................................................................................... |
39 |
1.11. Транзакции ............................................................................................... |
41 |
1.12. Контрольные вопросы............................................................................. |
43 |
1.13. Тесты......................................................................................................... |
45 |
2. Безопасность баз данных.................................................................................. |
49 |
2.1. Управление правами пользователей ........................................................ |
49 |
2.2. Проверка безопасности паролей пользователей..................................... |
57 |
2.3. Аудит изменений DDL .............................................................................. |
61 |
2.4. Аудит изменений данных.......................................................................... |
62 |
2.5. Шифрование секретных данных............................................................... |
66 |
2.6. Резервное копирование.............................................................................. |
70 |
2.7. Контрольные вопросы............................................................................... |
78 |
Заключение............................................................................................................ |
79 |
Библиографический список................................................................................. |
80 |
ПРЕДИСЛОВИЕ
Базы данных предназначены для работы с большими объемами информации, когда требуется выполнять поиск, сортировку и регулярное обновление данных. Системы управления базами данных эффективно выполняют операции обработки больших массивов информации, хранимых на протяжении длительных периодов времени. Современные технологии баз данных явлются одним из важных факторов успеха в любой отрасли бизнеса.
Цель написания учебного пособия – дать единую теоретическую базу, необходимую для выполнения курсовых, расчетно-графических работ по дисциплинам «Базы данных», «Разработка приложений баз данных». Пособие рассчитано на студентов всех форм обучения направлений «Информатика и вычислительная техника», «Программная инженерия».
В учебном пособии описываются ключевые моменты использования структурированного языка запросов SQL такие, например, как создание баз данных, добавление и изменение информации в базах данных, формирование запросов для получения информации из таблиц баз данных. Особое внимание уделено рассмотрению вопросов создания прав пользователей и управления ими, а также проверке безопасности паролей пользователей, шифрованию секретных данных. Изложение материала построено на основе большого количества примеров, с помощью которых рассматриваются представленные вопросы.
Учебное пособие включает в себя тесты и контрольные вопросы, необходимые для более глубокого понимания излагаемого материала и получения практических навыков его использования.
1. ОСНОВЫ РАБОТЫ В СУБД PostgreSQL
1.1. СОЗДАНИЕ НОВЫХ ПОЛЬЗОВАТЕЛЕЙ
Системы управления базами данных используются для быстрого извлечения требуемых данных, удовлетворяющих конкретным критериям. С помощью системы управления базами данных можно одновременно предоставить данные для нескольких пользователей на разных компьютерах, связанных через Internet. Таким образом, к базе данных разрешается совместный доступ множества пользователей для чтения и изменения данных. Большинство систем управления позволяют создавать учетные записи пользователей, чтобы указать для них различные уровни безопасности. Многие системы управления базами данных обеспечивают детализацию уровней безопасности, т. е. позволяют указать, что конкретно разрешено пользователю. Это обеспечивает существенно более широкие возможности управления доступом, чем подход, когда пользователь либо имеет доступ ко всем объектам базы данных, либо не имеет доступа вообще. Отметим работы [1–15],
вкоторых рассматриваются как теоретические основы, так и практические способы реализации баз данных.
ВPostgreSQL весьма важная роль отведена пользователям и группам пользователей. Информация о пользователях и группах пользователей хранится в системных каталогах. Учетные записи пользователей позволяют определить, какие именно действия разрешено выполнять
всистеме тому или иному из них. Пользователи и группы не связаны ни с какой конкретной базой данных и существуют как глобальные объекты баз данных.
Отметим, что в среде PostgreSQL по умолчанию создается один суперпользователь с именем «postgres». Все остальные пользователи со-
5
здаются этим суперпользователем. Для создания новых пользователей в PostgreSQL используется команда:
CREATE USER имя_пользователя [ [ WITH ] опции [ ... ] ]
В этой команде единственным обязательным параметром является имя нового пользователя, все остальные параметры необязательны. Если создать пользователя командой:
CREATE USER имя_пользователя
то у этого пользователя не будет пароля и прав для создания баз данных и новых пользователей у него тоже не будет. Полный синтаксис команды CREATE USER приводится на рис. 1.
Рис. 1. Команда CREATE USER для создания нового пользователя
В системе не допускается присутствие двух пользователей с одинаковыми именами. За ключевым словом WITH следуют опции SYSID и/или PASSWORD. Все остальные необязательные опции приводятся в произвольном порядке. Ниже перечислены ключевые слова и правила их использования.
SYSID uid. Пользователю назначается системный идентификатор uid. Если значение не указано, то идентификатор пользователя назначается автоматически (какое-либо уникальное число).
PASSWORD «пароль». Новому пользователю назначается пароль. Если значение не указано, то пароль не используется. Пароль может
6
быть установлен или изменен позже, с помощью команды ALTER USER.
CREATEDB | NOCREATEDB. Ключевое слово CREATEDB предо-
ставляет новому пользователю право создания баз данных, а также право уничтожения принадлежащих ему баз данных. Ключевое слово NOCREATEDB означает отсутствие прав создания баз данных. По умолчанию установлено NOCREATEDB.
CREATEUSER | NOCREATEUSER. Ключевое слово
CREATEUSER предоставляет пользователю право выполнять команды CREATE USER и DROP USER (создание и удаление пользователей). Ключевое слово NOCREATEUSER означает отсутствие прав создания и удаления пользователей и устанавливается по умолчанию.
IN GROUP группа [....]. Новый пользователь включается в группу с заданным именем. Допускается перечисление нескольких групп через запятую.
VALID UNTIL «срок». Срок действия пароля. Если параметр не задан, то срок действия пароля не ограничивается.
ENCRYPTED | UNENCRYPTED. Опция отвечает за то, как будет храниться пароль в системных каталогах (по умолчанию устанавливается параметр password_encryption – зашифрованный пароль).
При отсутствии ключевых слов CREATEDB и CREATEUSER будет создан пользователь, не обладающий какими-либо привилегиями. Он не может ни создавать, ни уничтожать базы данных и других пользователей.
Далее по тексту будут приведены примеры работы в командной строке SQL Shell (psql).
Пример 1. Создать пользователя «Andreev» с паролем «111222», который остается действительным до 31 января 2024 года. Команда будет выглядеть следующим образом:
CREATE USER ANDREEV WITH PASSWORD ‘111222’ VALID UNTIL 'Jan 31 2024';
При успешном завершении операции будет выдано сообщение: CREATE ROLE. Результат создания пользователя «Andreev» с паролем на аутентификацию «111222» демонстрируется на рис. 2.
7
Рис. 2. Команда создания нового пользователя
Для того чтобы просмотреть всех созданных пользователей, необходимо в командной строке набрать команду \du. После выполнения команды выведется таблица, содержащая имена пользователей и их атрибуты [8].
Модификация существующих пользователей выполняется с помощью команды ALTER USER. Синтаксис команды ALTER USER показан на рис. 3.
Рис. 3. Команда для модификации существующих пользователей
Обязательный аргумент «имя_пользователя» определяет пользователя, для которого требуется изменить параметры. Команда ALTER USER также часто используется для изменения пароля и/или срока его действия. Если срок действия пароля не надо ограничивать, то можно использовать значение infinity (VALID UNTIL 'infinity'). При успешном выполнении команды будет выдано сообщение: ALTER ROLE.
Пример 2. Изменить пароль пользователя ANDREEV на «333444», установить неограниченный срок его действия и предоставить ему права суперпользователя. Команда записывается следующим образом:
ALTER USER ANDREEV WITH PASSWORD ‘333444’ CREATEUSER VALID UNTIL 'infinity';
При успешном завершении операции будет выдано сообщение: ALTER ROLE. Результат примера 2 приведен на рис. 4.
8
Рис. 4. Команда изменения пароля
Удалить пользователя необходимо с помощью команды DROP USER. Синтаксис команды DROP USER:
DROP USER имя_пользователя;
Параметр «имя_пользователя» определяет имя пользователя, удаляемого из системы. При успешном завершении операции будет выдано сообщение: DROP ROLE. Управление правами пользователей более подробно рассмотрено в разделе 2 этого пособия.
1.2.СОЗДАНИЕ БАЗ ДАННЫХ
ВPostgreSQL для создания баз данных можно использовать коман-
ду CREATE DATABASE. Синтаксис команды CREATE DATABASE
представлен на рис. 5.
Рис. 5. Команда CREATE DATABASE
Обязательный параметр «имя_базы_данных» определяет имя создаваемой базы данных, имена баз данных должны начинаться с алфавитного символа и длина не должна превышать 31 символа. За необязательным ключевым словом WITH можно указать дополнительные атрибуты.
OWNER [=] имя_пользователя. Параметр «имя_пользователя» определяет владельца базы данных. По умолчанию предполагается, что владельцем является пользователь, выполняющий команду.
9
LOCATION [=] ‘каталог’. Здесь определяется каталог, в котором будет храниться база данных. Если параметр LOCATION отсутствует или в нем указано ключевое слово DEFAULT, то PostgreSQL создает базу данных в каталоге данных по умолчанию, задаваемом переменной среды PGDATA. PostgreSQL позволяет создать в заданном каталоге любое количество баз.
TEMPLATE [=] шаблон. Имя шаблона, используемого в качестве прототипа для создания новой базы данных. Если шаблон не задан или используется конструкция TEMPLATE = DEFAULT, то PostgreSQL
создает новую базу данных на основе шаблона template1. ENCODING [=] имя_кодировки. Если ключевое слово ENCODING
не задано или используется параметр DEFAULT, то PostgreSQL создает базу данных, используя кодировку по умолчанию. Обычно это ко-
дировка SQL ASCII.
CONNECTION LIMIT [=] количество. Параметр определяет, сколько одновременных соединений возможно к базе данных. Если параметр не указан, то ограничение на количество соединений отсутствует.
Пример 3. Создать базу данных «test111». Команда имеет следующий вид:
CREATE DATABASE test111;
При успешном завершении операции будет выдано сообщение: CREATE DATABASE. Результат создания базы данных с помощью команды CREATE DATABASE приводится на рис. 6.
Рис. 6. Команда CREATE DATABASE
Создатель базы данных автоматически является владельцем новой базы данных. Владельцу базы данных будут принадлежать все объекты, которые в ней хранятся. Владелец базы данных имеет право предоставлять другим пользователям доступ к ее объектам.
Команда
postgres=# \connect имя_базы_данных;
используется для переключения из одной базы данных в другую.
10
