Шпаргалка по PostgreSQL
PostgreSQL это кроссплатформенная полнофункциональная объектно-реляционная база данных. Эта небольшая заметка написана с целью собрать в одном месте небольшой туториал по установке и настройке этой СУБД. Действие происходит в ОС Ubuntu 16.04.
Установка PostgreSQL
По умолчанию PostgreSQL входит в пакет Ubuntu. Систему можно установить следующей командой:
sudo apt-get install postgresql-9.4
Для установки самой последней версии СУБД, необходимо выполнить следующие шаги:
- Создаём файл /etc/apt/sources.list.d/pgdg.list
- Добавляем в него следующее содержимое:
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
- Импортируем новый ключ для подписи, выполнив
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \ sudo apt-key add - sudo apt-get update
- Устанавливаем последнюю версию:
apt-get install postgresql-9.5
Настройка
После успешной установки самоё время заняться базовой настройкой СУБД PostgreSQL.
По умолчанию доступ к СУБД имеет пользователь postgres. Заходим под ним:
sudo -u postgres psql
Для того, чтобы создать новую базу данных выполняем следующую команду внутри psql:
CREATE DATABASE mydatabase;
Создаём отдельного пользователя с логином myuser и паролем password:
CREATE USER myuser WITH password 'password';
Чтобы дать полные привилегии над нашей новой базой данных mydatabase пользователю myuser выполняем:
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;
Чтобы сделать нового пользователя администратором нашей СУБД, выполняем:
ALTER USER myuser WITH SUPERUSER;
Чтобы лишить его ранее предоставленных полномочий, выполним:
ALTER USER myuser WITH NOSUPERUSER;
Если пользователю нужно дать лишь права на создание новой БД (например, при запуске тестов в Django, фреймворк создаёт отдельную БД с префиксом test_):
ALTER USER myuser CREATEDB;
Для того, чтобы авторизоваться в PostgreSQL под новым пользователем, запускаем:
psql -h localhost mydatabase myuser
Для выхода из сеанса, необходимо выполнить команду \q
Фишки при работе с PostgreSQL
Чтобы не запоминать массу команд, существуют GUI утилиты для работы с PostgreSQL. Наиболее популярной считается pgadmin3.
sudo apt-get install pgadmin3
Для тех, кто всё же предпочитает оставаться в терминале, есть интересный скрипт, написанный на Python: pgcli. Его особенностью является автодополнение и подсветка синтаксиса SQL команд.
pip install pgcli
pgcli mydatabase
или
pgcli postgres://myuser:password@localhost:5432/mydatabase
Просто и удобно.
Снятие дампа БД PostgreSQL можно сделать вот так:
pg_dump -c -h localhost -U myuser mydatabase > ./mydump.sql
Импорт в PostgreSQL делается следующим образом:
psql -h localhost -U username dbname < dump.sql
PostgreSQL масштабная и сложная СУБД, и для её настройки потребуется немало времени, если вы столкнулись с ней в работе впервые. Эта заметка лишь начало интересного пути. Постараюсь делиться опытом и знаниями по мере возможности и сил 🙂
💌 Присоединяйтесь к рассылке
Понравился контент? Пожалуйста, подпишись на рассылку.
Иллюстрированный самоучитель по PostgreSQL › Управление базами данных › Создание и удаление баз данных [страница — 215] | Самоучители по программированию
Создание и удаление баз данных
В процессе установки PostgreSQL создаются два стандартных шаблона баз данных, template() и templatel, на основе которых создаются новые базы данных. Из этих двух шаблонов вы можете подключиться только к templatel. Это связано с тем, что шаблон template() всегда остается пустым, a tempi atel можно модифицировать и включать в него поддержку языков, функции и даже объекты баз данных (таблицы, представления и последовательности). Удаление шаблонов из системы не разрешается.
Далее описаны процедуры создания и удаления баз данных в PostgreSQL.
Создание базы данных
В PostgreSQL существует два способа создания новых баз данных: команда SQL CREATE DATABASE и программа createdb, работающая в режиме командной строки. Оба способа требуют наличия необходимых прав. Для создания базы данных не нужно быть суперпользователем PostgreSQL, но в таблице pg_shadow должно быть установлено право usecreatedb.
Если вы не уверены в том, обладает ли этим правом конкретный пользователь, для проверки можно воспользоваться запросом к представлению pgjjser (которое, в свою очередь, получает информацию из таблицы pg_shadow; прямые запросы к pg_shadow разрешены только суперпользователям). Поле usecreatedb таблицы pg_shadow содержит логический признак наличия права создания таблиц у данного пользователя. В листинге 9.9 приведен пример запроса к представлению pg_user, проверяющего наличие права usecreatedb для пользователя guest.
Листинг 9.9. Проверка наличия права usecreatedb.
tempiatel › SELECT usecreatedb FROM pg_user WHERE usename='guest': usecreatedb f (1 row)
Команда CREATE DATABASE
Команда SQL CREATE DATABASE имеет следующий синтаксис:
CREATE DATABASE база_дднных [ WITH [ LOCATION = 'каталог' ] [ TEMPLATE = шаблон ] [ ENCODING = кодировка ] ]
Параметр база_данных определяет имя создаваемой базы данных. Имена баз данных должны начинаться с алфавитного символа, а их длина не должна превышать 31 символа. PostgreSQL позволяет создать в заданном каталоге любое количество баз данных (естественно, при наличии свободного места на диске).
За необязательным ключевым словом WITH можно указать до трех дополнительных атрибутов.
- LOCATION = ‘каталог’. В апострофах передается имя переменной среды, инициализированной в среде пользователя, запустившего серверный процесс PostgreSQL. Предположим, в файл /home/postgres/.bash_profile входит следующая строка:
export PGDATA2="/usr/local/pgsql/data2"
После запуска PostgreSQL (при наличии определенной переменной PGDATA2) переменная может использоваться в качестве значения параметра LOCATION. Эта общая мера безопасности предотвращает запись в посторонние каталоги файловой системы. Если ключевое слово LOCATION отсутствует, PostgreSQL создает базу данных в каталоге данных по умолчанию (например, /usr/local/pgsql/data).
- TEMPLATE = шаблон. Шаблон, используемый в качестве прототипа для создания новой базы данных. Все объекты, присутствующие в шаблоне, воспроизводятся в созданной базе. Если шаблон не задан, PostgreSQL создает новую базу данных на основе шаблона templatel. Если вы хотите создать пустую базу данных, не содержащую объектов из tempi atel, укажите шаблон tempi ateO.
- ENCODING = кодировка. Значение параметра определяется либо в виде строковой константы, описывающей тип кодировки (SQL_ASCII, LATIN1 и т. д.), либо в виде эквивалентной числовой константы PostgreSQL. Допустимые типы кодировок PostgreSQL и их числовые значения перечислены в приложении А. Если ключевое слово ENCODING не задано, PostgreSQL создает базу данных в кодировке по умолчанию. Обычно это кодировка SQL_ASCII, хотя в процессе первоначальной настройки конфигурации PostgreSQL можно выбрать другую кодировку (процедура выбора кодировки описана в главе 2).
Внимание
Значение, передаваемое с ключевым словом LOCAi ION, должно определять имя переменной среды. Оно не может напрямую описывать системный путь (например, /usr/local/pgsql/data2), если только в процессе первоначальной компиляции и установки PostgreSQL команде gmake не был передан аргумент CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS.
PostgreSQL. Создать базу данных и пользователя для нее.
Запускаем psql
под пользователем postgres
:
Теперь в консоли PostgreSQL вводим следующие команды:
create database dbname with encoding='UNICODE'; create user dbuser with password 'dbpass'; grant all privileges on database dbname to dbuser;
А также не забываем дать доступ новому пользователю к серверу, для этого в файле /var/lib/pgsql/data/pg_hba.conf
# For dbuser: host dbname dbuser 127.0.0.1/32 md5 local dbname dbuser md5
Где:
dbname
– имя базы данныхdbuser
– имя пользователяdbpass
– пароль пользователяdbuser
И говорим серверу PostgreSQL перечитать измененный конфиг pg_hba.conf
:
root@Linux# service postgresql reload
Скрипт для удобства:
#!/bin/sh PGPORT= echo 'Input dbname: ' read dbname dbuser=${dbuser:-$dbname} echo "Input dbuser: [$dbuser]" # Generate by dbname. randpass=$(tr -cd A-Za-z < /dev/urandom | head -c8) echo "Input dbpass [$randpass]:" # Generate random. read dbpass dbpass=${dbpass:-$randpass} # Facepalm centos... Need fill path to binary psql: /usr/pgsql-9.3/bin/psql su - postgres -c "/usr/pgsql-9.3/bin/psql --dbname=$DB --port=$PGPORT <<_EOF \x CREATE DATABASE $dbname WITH ENCODING='UNICODE'; CREATE USER $dbuser WITH PASSWORD '$dbpass'; GRANT ALL PRIVILEGES ON DATABASE $dbname TO $dbuser; _EOF " # TODO: check error code here. # Do backup modified cfg files. cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf_`date +%s` PGPORT=${PGPORT:-5432} [ -n "$dbname" -a -n "$dbuser" ] && cat <<-_EOF >>/var/lib/pgsql/data/pg_hba.conf # For $dbuser, generated at `date`: host $dbname $dbuser 127.0.0.1/32 md5 local $dbname $dbuser md5 _EOF # Do reload. service postgresql-9.3 reload
Ссылки по теме:
- PostgreSQL. Как создать базу данных и пользователя для нее.
PostgreSQL / Postgres Create Database: как создать пример
- Home
Testing
- Back
- Agile Testing
- BugZilla
- Cucumber
- 000 J2000
- 000 J2000 Testing
- Назад
- JUnit
- LoadRunner
- Ручное тестирование
- Мобильное тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Центр качества SAP
- SoapUI
- Управление тестированием
- TestLink
SAP
- Назад
- ABAP
- APO
- Начинающий
- Basis
- BODS
- BI
- BPC
- CO
- Назад
- CRM
- Crystal Reports
- MMO
- Crystal Reports
- Заработная плата
- Назад
- PI / PO
- PP
- SD
- SAPUI5
- Безопасность
- Менеджер решений
- Successfactors
- SAP Back Tutorials
- 9007
- Apache
- AngularJS
- ASP.Net
- C
- C #
- C ++
- CodeIgniter
- СУБД
- JavaScript
- Назад
- Java
- JSP
- Kotlin
- Linux
- Linux
- Kotlin
- Linux
js
- Perl
- Назад
- PHP
- PL / SQL
- PostgreSQL
- Python
- ReactJS
- Ruby & Rails
- Scala
- SQL 000
- SQL 000
- SQL 000
0003 SQL000- UML
- VB.Net
- VBScript
- Веб-службы
- WPF
Обязательно учите!
- Назад
- Бухгалтерский учет
- Алгоритмы
- Android
- Блокчейн
- Business Analyst
- Создание веб-сайта
- Облачные вычисления
- COBOL
- Встроенный
- Compiler Design
- 9003
Управление пользователями и ролями PostgreSQL
PostgreSQL — одна из самых популярных систем реляционных баз данных с открытым исходным кодом.За более чем 30-летний опыт разработки PostgreSQL зарекомендовала себя как высоконадежная и устойчивая база данных, способная обрабатывать большое количество сложных рабочих нагрузок с данными. PostgreSQL считается основной базой данных с открытым исходным кодом при миграции с коммерческих баз данных, таких как Oracle. Amazon Web Services (AWS) предоставляет два варианта управляемого PostgreSQL: Amazon Relational Database Service (Amazon RDS) для PostgreSQL и Amazon Aurora PostgreSQL. В этом посте я расскажу о некоторых лучших практиках управления пользователями и ролями в PostgreSQL.
С PostgreSQL вы можете создавать пользователей и роли с детальными разрешениями доступа. Новому пользователю или роли необходимо выборочно предоставить необходимые разрешения для каждого объекта базы данных. Это дает конечному пользователю большие возможности, но в то же время потенциально усложняет процесс создания пользователей и ролей с правильными разрешениями.
PostgreSQL позволяет вам предоставлять разрешения непосредственно пользователям базы данных. Однако рекомендуется создавать несколько ролей с определенными наборами разрешений в зависимости от требований приложения и доступа.Затем назначьте каждому пользователю соответствующую роль. Роли должны использоваться для принудительного применения модели с наименьшими привилегиями для доступа к объектам базы данных. Главный пользователь, созданный во время создания экземпляра Amazon RDS и Aurora PostgreSQL, должен использоваться только для задач администрирования баз данных, таких как создание других пользователей, ролей и баз данных. Приложение никогда не должно использовать главного пользователя.
Рекомендуемый подход к настройке детального контроля доступа в PostgreSQL следующий:
- Используйте главного пользователя для создания ролей для каждого приложения или варианта использования, например
только для чтения
идля чтения и записи
. - Добавьте разрешения, чтобы разрешить этим ролям доступ к различным объектам базы данных. Например, роль
только для чтения
может выполнять только запросыSELECT
. - Предоставьте ролям минимально возможные разрешения, необходимые для работы.
- Создавайте новых пользователей для каждого приложения или отдельных функций, например
app_user
иreporting_user
. - Назначьте этим пользователям соответствующие роли, чтобы быстро предоставить им те же разрешения, что и роли.Например, предоставьте
роль чтения и записи
пользователюapp_user
и предоставьте рольтолько для чтения
пользователюreporting_user
. - В любой момент вы можете удалить роль пользователя, чтобы отозвать разрешения.
Эти рекомендации обобщены на следующей диаграмме:
В следующих разделах эти шаги подробно обсуждаются. Вы можете подключиться к конечной точке RDS для своей базы данных PostgreSQL с помощью клиента, такого как psql, и запустить операторы SQL.
Пользователи, группы и роли
Пользователи, группы и роли — это то же самое в PostgreSQL, с той лишь разницей, что пользователи имеют разрешение на вход по умолчанию. Операторы CREATE USER
и CREATE GROUP
фактически являются псевдонимами для оператора CREATE ROLE
.
В других системах управления реляционными базами данных (СУБД), таких как Oracle, пользователи и роли — это две разные сущности.В Oracle роль не может использоваться для входа в базу данных. Роли используются только для групповых грантов и других ролей. Затем эту роль можно назначить одному или нескольким пользователям, чтобы предоставить им все разрешения. Для получения дополнительных сведений о переносе пользователей, ролей и грантов из Oracle в PostgreSQL см. Сообщение в блоге AWS Использование SQL для сопоставления пользователей, ролей и грантов из Oracle в PostgreSQL.
Чтобы создать пользователя PostgreSQL, используйте следующий оператор SQL:
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ myuser С ПАРОЛЕМ 'secret_passwd';
Вы также можете создать пользователя с помощью следующего оператора SQL:
СОЗДАТЬ РОЛЬ myuser С ПАРОЛЕМ ДЛЯ ВХОДА 'secret_passwd';
Оба эти оператора создают одного и того же пользователя.Этот новый пользователь не имеет никаких разрешений, кроме разрешений по умолчанию, доступных для публичной роли
. Все новые пользователи и роли наследуют разрешения от публичной роли
. В следующем разделе представлены дополнительные сведения о публичной роли
.
Публичная схема и публичная роль
При создании новой базы данных PostgreSQL по умолчанию создает схему с именем public
и предоставляет доступ к этой схеме серверной роли с именем public
.Всем новым пользователям и ролям по умолчанию предоставляется эта общедоступная роль
, поэтому они могут создавать объекты в общедоступной схеме
.
PostgreSQL использует концепцию пути поиска. Путь поиска — это список имен схем, который PostgreSQL проверяет, если вы не используете полное имя объекта базы данных. Например, когда вы выбираете из таблицы с именем «mytable», PostgreSQL ищет эту таблицу в схемах, перечисленных в пути поиска. Он выбирает первое найденное совпадение.По умолчанию путь поиска содержит следующие схемы:
postgres = # show search_path;
search_path
-----------------
"$ user", общедоступный
(1 ряд)
Имя « $ user
» преобразуется в имя текущего вошедшего в систему пользователя. По умолчанию схемы с тем же именем, что и имя пользователя, не существует. Таким образом, общедоступная схема
становится схемой по умолчанию всякий раз, когда используется неквалифицированное имя объекта.Из-за этого, когда пользователь пытается создать новую таблицу без указания имени схемы, таблица создается в общедоступной схеме
. Как упоминалось ранее, по умолчанию все пользователи имеют доступ для создания объектов в общедоступной схеме
, и поэтому таблица создается успешно.
Это становится проблемой, если вы пытаетесь создать пользователя только для чтения. Даже если вы ограничите все привилегии, разрешения, унаследованные через публичную роль
, позволяют пользователю создавать объекты в публичной схеме
.
Чтобы исправить это, вы должны отозвать разрешение на создание по умолчанию для публичной схемы
у публичной роли
, используя следующий оператор SQL:
ОТМЕНА СОЗДАНИЯ НА СХЕМЕ public ОТ PUBLIC;
Убедитесь, что вы являетесь владельцем общедоступной схемы
или являетесь частью роли, которая позволяет вам запускать этот оператор SQL.
Следующее утверждение отменяет возможность публичной роли подключаться к базе данных:
ОТЗЫВАТЬ ВСЕ НА БАЗЕ ДАННЫХ mydatabase ОТ PUBLIC;
Это гарантирует, что пользователи не могут подключаться к базе данных по умолчанию, если это разрешение не предоставлено явно.
Отмена разрешений у публичной роли
влияет на всех существующих пользователей и ролей. Всем пользователям и ролям, которые должны иметь возможность подключаться к базе данных или создавать объекты в общедоступной схеме, должны быть явно предоставлены разрешения перед тем, как отозвать какие-либо разрешения от общедоступной роли
в производственной среде.
Создание ролей базы данных
В следующих разделах описан процесс создания новых ролей и предоставления им разрешений на доступ к различным объектам базы данных.Разрешения должны быть предоставлены на уровне базы данных, схемы и объекта схемы. Например, если вам нужно предоставить доступ к таблице, вы также должны убедиться, что роль имеет доступ к базе данных и схеме, в которой существует таблица. Если какое-либо из разрешений отсутствует, роль не может получить доступ к таблице.
Роль только для чтения
Первым шагом является создание новой роли с именем только для чтения
, используя следующий оператор SQL:
Это базовая роль без разрешений и без пароля.Его нельзя использовать для входа в базу данных.
Предоставьте этой роли разрешение на подключение к целевой базе данных с именем «mydatabase»:
GRANT CONNECT ON DATABASE mydatabase TO только для чтения;
Следующим шагом является предоставление доступа к вашей схеме для использования этой роли. Предположим, схема называется myschema
:
ПРЕДОСТАВЛЕНИЕ ИСПОЛЬЗОВАНИЯ НА СХЕМЕ myschema ТОЛЬКО для чтения;
Этот шаг предоставляет роли только для чтения
разрешение на выполнение некоторых действий внутри схемы.Без этого шага роль только для чтения
не может выполнять какие-либо действия с объектами в этой схеме, даже если для этих объектов были предоставлены разрешения.
Следующим шагом является предоставление роли только для чтения
для выполнения выбора в требуемых таблицах.
GRANT SELECT ON TABLE mytable1, mytable2 TO только для чтения;
Если требуется предоставить доступ ко всем таблицам и представлениям в схеме, можно использовать следующий SQL:
GRANT SELECT ДЛЯ ВСЕХ ТАБЛИЦ В СХЕМЕ myschema TO только для чтения;
Предыдущий оператор SQL предоставляет SELECT
доступ к роли только для чтения
для всех существующих таблиц и представлений в схеме myschema
.Обратите внимание, что любые новые таблицы, которые будут добавлены в будущем, не будут доступны пользователю только для чтения
. Чтобы гарантировать, что новые таблицы и представления также доступны, запустите следующий оператор для автоматического предоставления разрешений:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO readonly;
Роль чтения / записи
Процесс добавления роли чтения / записи очень похож на процесс роли только для чтения, рассмотренный ранее.Первый шаг — создание роли:
Предоставьте этой роли разрешение на подключение к целевой базе данных:
GRANT CONNECT ON DATABASE mydatabase TO readwrite;
Предоставить привилегию использования схемы:
ПРЕДОСТАВЛЕНИЕ ИСПОЛЬЗОВАНИЯ НА СХЕМЕ myschema ДЛЯ readwrite;
Если вы хотите разрешить этой роли создавать новые объекты, такие как таблицы в этой схеме, используйте следующий SQL вместо предыдущего:
ПРЕДОСТАВЛЯЙТЕ ИСПОЛЬЗОВАНИЕ, СОЗДАЙТЕ НА СХЕМЕ myschema ДЛЯ чтения и записи;
Следующий шаг — предоставить доступ к таблицам.Как упоминалось в предыдущем разделе, грант может относиться к отдельным таблицам или всем таблицам в схеме. Для отдельных таблиц используйте следующий SQL:
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE mytable1, mytable2 TO readwrite;
Для всех таблиц и представлений в схеме используйте следующий SQL:
GRANT SELECT, INSERT, UPDATE, DELETE ДЛЯ ВСЕХ ТАБЛИЦ В СХЕМЕ myschema TO readwrite;
Для автоматического предоставления разрешений на таблицы и представления, добавленные в будущем:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO readwrite;
Для ролей чтения / записи обычно также требуется использовать последовательности.Вы можете предоставить выборочный доступ следующим образом:
ПРЕДОСТАВИТЬ ИСПОЛЬЗОВАНИЕ ПОСЛЕДОВАТЕЛЬНОСТИ myseq1, myseq2 ДЛЯ чтения и записи;
Вы также можете предоставить разрешение для всех последовательностей, используя следующий оператор SQL:
ПРЕДОСТАВЛЕНИЕ ИСПОЛЬЗОВАНИЯ ДЛЯ ВСЕХ ПОСЛЕДОВАТЕЛЬНОСТЕЙ В СХЕМЕ myschema ДЛЯ readwrite;
Для автоматического предоставления разрешений последовательностям, добавленным в будущем:
ИЗМЕНИТЬ ПРИВИЛЕГИИ ПО УМОЛЧАНИЮ В СХЕМЕ myschema ПРЕДОСТАВЛЯТЬ ИСПОЛЬЗОВАНИЕ ПОСЛЕДОВАТЕЛЬНОСТЕЙ ДЛЯ РЕДАКТИРОВАНИЯ;
Вы можете предоставить больше или меньше разрешений в зависимости от требований.Документация по команде PostgreSQL GRANT предоставляет более подробную информацию об объектах, для которых могут быть предоставлены разрешения, и о необходимых операторах SQL.
Создание пользователей базы данных
При наличии ролей процесс создания пользователей упрощается. Просто создайте пользователя и предоставьте ему одну из существующих ролей. Вот операторы SQL для этого процесса:
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ myuser1 С ПАРОЛЕМ 'secret_passwd';
ПРЕДОСТАВИТЬ myuser1 только для чтения;
Это предоставляет myuser1
те же разрешения, что и роль только для чтения
.
Точно так же вы можете предоставить пользователю доступ для чтения и записи, назначив роль для чтения и записи
. Документация PostgreSQL CREATE USER содержит более подробную информацию о параметрах, которые вы можете установить при создании пользователя. Например, вы можете указать срок действия для пользователя или разрешить пользователю создавать базы данных.
Управление паролями пользователей
После создания пользователя вы должны предоставить эти учетные данные приложению, чтобы оно могло получить доступ к базе данных.Важно убедиться, что эти учетные данные не жестко закодированы в исходном коде и не помещены в некоторые общие файлы конфигурации в виде открытого текста. AWS предлагает решение этой проблемы с помощью AWS Secrets Manager. Используя Secrets Manager, вы можете сохранить учетные данные, а затем использовать AWS Identity and Access Management (IAM), чтобы только определенные пользователи и роли IAM могли читать учетные данные. Инструкции по выполнению этого действия см. В разделе Создание секретов и управление ими с помощью AWS Secrets Manager в Руководстве пользователя AWS Secrets Manager .
Помимо хранения учетных данных, очень полезной функцией, которую предоставляет Secrets Manager, является ротация пароля пользователя базы данных. Вы можете использовать эту функцию, чтобы настроить политику для автоматической смены пароля с определенной периодичностью. Дополнительные сведения о том, как настроить это, чтобы не было простоев для приложений, см. В разделе Ротация секретов AWS Secrets Manager.
Amazon RDS и Amazon Aurora PostgreSQL предоставляют новую функцию ограниченного управления паролями, которая поддерживается в PostgreSQL 10.6 и выше. Используя новый параметр и особую роль, вы можете ограничить изменение пароля пользователя базы данных членами этой особой роли. Таким образом вы обеспечиваете больший контроль над управлением паролями на стороне клиента (например, требования к истечению срока действия и требования к сложности).
Аутентификация базы данных IAM
Amazon RDS и Aurora PostgreSQL интегрированы с IAM, поэтому вы можете аутентифицироваться в своем инстансе БД с помощью аутентификации базы данных IAM. Эта функция доступна для Amazon RDS PostgreSQL версии 9.5.14, 9.6.9 или новее, а также версия 10.4 или новее. Для Aurora PostgreSQL эта функция доступна для версий 9.6.9 или новее и 10.4 или новее. Ключевым преимуществом этой функции является то, что вы можете использовать IAM для централизованного управления доступом к ресурсам базы данных вместо управления доступом индивидуально для каждого экземпляра БД. Используя этот метод, администратор может легко разрешить или отозвать доступ к базе данных через политику IAM.
После добавления грантов IAM пользователь может запросить временный пароль с помощью интерфейса командной строки AWS, а затем подключиться к базе данных, используя этот временный пароль.На следующей схеме показан этот рабочий процесс.
Для получения дополнительной информации об этой функции см. Аутентификация базы данных IAM для MySQL и PostgreSQL. В документации также содержатся подробные инструкции по настройке аутентификации IAM DB.
Этот метод касается только части аутентификации. Предоставление разрешений для различных объектов базы данных выполняется в самой базе данных, как описано в этом сообщении. Например, чтобы предоставить этому пользователю доступ для чтения и записи
, запустите следующий оператор SQL:
GRANT readwrite TO db_user;
Отмена или изменение разрешений пользователя
Используя метод, описанный ранее, очень легко отозвать привилегии у пользователя.Например, вы можете удалить разрешение на чтение и запись
из myuser1, используя следующий оператор SQL:
REVOKE readwrite FROM myuser1;
Аналогичным образом вы можете предоставить новую роль следующим образом:
GRANT только для чтения для myuser1;
Мониторинг использования
Вы можете отслеживать активность пользователей, задав параметры ведения журнала PostgreSQL, доступные в группах параметров RDS.Например, вы можете установить параметры log_connections
и log_disconnections
, чтобы фиксировать все новые соединения и разъединения. После установки этих параметров в группе параметров вы увидите следующие сообщения в файлах журнала:
2018-11-09 21:08:39 UTC: XX-XX-XX-XX.amazon.com (27585): myuser @ mydb: [18014]: LOG: соединение разрешено: user = myuser database = mydb SSL включен (протокол = TLSv1.2, шифр = ECDHE-RSA-AES256-GCM-SHA384, сжатие = выключено)
2018-11-09 21:09:19 UTC: XX-XX-XX-XX.amazon.com (27585): myuser @ mydb: [18014]: LOG: отключение: время сеанса: 0: 00: 39.649 user = myuser database = mydb host = XX-XX-XX-XX.amazon.com port = 27585
Если вам требуется более подробная информация о пользовательском аудите на уровне сеанса или объекта, вы можете использовать расширение pgAudit. Шаги по настройке pgAudit
с Amazon RDS и Aurora PostgreSQL доступны в разделе Работа с расширением pgaudit в Руководстве пользователя Amazon RDS .
Увеличение количества журналов базы данных влияет на размер хранилища, использование ввода-вывода и использование ЦП.По этой причине важно протестировать эти изменения перед их развертыванием в производственной среде.
Проверка предоставленных ролей
Вы можете использовать следующий запрос, чтобы получить список всех пользователей и ролей базы данных вместе со списком ролей, которые были им предоставлены:
ВЫБРАТЬ
r.rolname,
ARRAY (ВЫБЕРИТЕ b.rolname
ОТ pg_catalog.pg_auth_members m
ПРИСОЕДИНЯЙТЕСЬ к pg_catalog.pg_roles b ON (m.roleid = b.oid)
ГДЕ m.member = r.oid) как memberof
ИЗ pg_catalog.pg_roles r
ГДЕ r.rolname НЕ ВХОДИТ ('pg_signal_backend', 'rds_iam',
'rds_replication', 'rds_superuser',
'rdsadmin', 'rdsrepladmin')
ЗАКАЗАТЬ ПО 1;
Вот пример вывода из тестового экземпляра RDS:
имя пользователя | член
---------------- + -----------------
app_user | {читай пиши}
postgres | {rds_superuser}
только чтение | {}
readwrite | {}
Reporting_user | {только для чтения}
Обратите внимание, что пользователь может быть членом нескольких ролей с различными или частично совпадающими разрешениями.В этом случае пользователь получает сумму всех разрешений.
Вы также можете использовать таблицу каталога pg_roles для проверки атрибутов, таких как дата истечения срока действия пароля или количество разрешенных параллельных соединений.
Резюме
В этом посте я поделился некоторыми передовыми методами управления пользователями и ролями в PostgreSQL. Этот пост предоставляет базовую структуру, которую вы можете изменить в зависимости от требований вашего приложения и принципов минимальных привилегий.
Чтобы обобщить концепции, я предоставил следующие справочные операторы SQL для реализации пользователей и ролей на примере сценария:
- База данных PostgreSQL была создана с первичной базой данных с именем
mydatabase
. - Создана новая схема с именем
myschema
с несколькими таблицами. - Необходимо создать двух пользователей отчетов с разрешениями на чтение всех таблиц в схеме
myschema
. - Необходимо создать двух пользователей приложения с разрешениями на чтение и запись во все таблицы в схеме
myschema
, а также на создание новых таблиц. - Пользователи должны автоматически получать разрешения на любые новые таблицы, которые будут добавлены в будущем.
Для реализации этого сценария необходимо подключиться к базе данных mydatabase с помощью главного пользователя, а затем запустить следующие операторы SQL, используя любой из клиентов PostgreSQL, например psql или pgAdmin:
- отозвать привилегии для публичной роли
ОТМЕНА СОЗДАНИЯ НА СХЕМЕ общедоступной ОТ ОБЩЕСТВЕННОСТИ;
ОТЗЫВАТЬ ВСЕ НА БАЗЕ ДАННЫХ mydatabase ОТ PUBLIC;
- Роль только для чтения
СОЗДАТЬ РОЛЬ только для чтения;
ПРЕДОСТАВИТЬ СОЕДИНЕНИЕ БАЗЫ ДАННЫХ mydatabase ТОЛЬКО для чтения;
ПРЕДОСТАВЛЯЙТЕ ИСПОЛЬЗОВАНИЕ НА СХЕМЕ myschema ТОЛЬКО для чтения;
GRANT SELECT ДЛЯ ВСЕХ ТАБЛИЦ В СХЕМЕ myschema ТОЛЬКО для чтения;
ИЗМЕНИТЬ ПРИВИЛЕГИИ ПО УМОЛЧАНИЮ В СХЕМЕ myschema GRANT SELECT ON TABLES TO readonly;
- Роль чтения / записи
CREATE ROLE readwrite;
ПРЕДОСТАВИТЬ СОЕДИНЕНИЕ НА БАЗЕ ДАННЫХ mydatabase ДЛЯ чтения и записи;
ПРЕДОСТАВЛЯЙТЕ ИСПОЛЬЗОВАНИЕ, СОЗДАВАЙТЕ НА СХЕМЕ myschema ДЛЯ чтения и записи;
GRANT SELECT, INSERT, UPDATE, DELETE ДЛЯ ВСЕХ ТАБЛИЦ В СХЕМЕ myschema TO readwrite;
ИЗМЕНИТЬ ПРИВИЛЕГИИ ПО УМОЛЧАНИЮ В СХЕМЕ myschema GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO readwrite;
ПРЕДОСТАВЛЯЙТЕ ИСПОЛЬЗОВАНИЕ ВСЕХ ПОСЛЕДОВАТЕЛЬНОСТЕЙ В СХЕМЕ myschema для чтения и записи;
ИЗМЕНИТЬ ПРИВИЛЕГИИ ПО УМОЛЧАНИЮ В СХЕМЕ myschema ПРЕДОСТАВИТЬ ИСПОЛЬЗОВАНИЕ ПОСЛЕДОВАТЕЛЬНОСТЕЙ ДЛЯ readwrite;
- Создание пользователей
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ Reporting_user1 С ПАРОЛЕМ 'some_secret_passwd';
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ Reporting_user2 С ПАРОЛЕМ 'some_secret_passwd';
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ app_user1 С ПАРОЛЕМ 'some_secret_passwd';
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ app_user2 С ПАРОЛЕМ 'some_secret_passwd';
- Предоставлять привилегии пользователям
ПРЕДОСТАВИТЬ ТОЛЬКО ДЛЯ ЧТЕНИЯ Reporting_user1;
ПРЕДОСТАВЛЯТЬ ТОЛЬКО ДЛЯ ЧТЕНИЯ Report_user2
GRANT readwrite TO app_user1;
GRANT readwrite TO app_user2;
Дополнительную информацию о пользователях и ролях PostgreSQL можно найти на веб-сайте документации PostgreSQL.
Если у вас есть какие-либо вопросы или комментарии по поводу этого сообщения в блоге, не стесняйтесь использовать раздел комментариев здесь, чтобы опубликовать свои мысли.
Об авторе
Ясер Раджа — старший консультант отдела профессиональных услуг в Amazon Web Services . Он работает с клиентами над созданием масштабируемых, высокодоступных и безопасных решений в облаке AWS. Его основная область — однородная и разнородная миграция локальных баз данных на AWS RDS и Aurora PostgreSQL.
PostgreSQL — Gentoo Wiki
PostgreSQL — это бесплатная система управления реляционными базами данных (СУБД) с открытым исходным кодом. Он поддерживает такие вещи, как транзакции, схемы и внешние ключи, и часто рекламируется как более строгое соблюдение стандартов SQL и более безопасный по умолчанию, чем любая другая база данных, коммерческая или иная.
Посетите страницу «О программе» на postgresql.org для получения дополнительной информации.
Установка, обновление и миграция
См. Gentoo PostgreSQL Quick Start Guide для получения подробной информации об установке, обновлении или миграции PostgreSQL.
Добавить пользователя
пользователь $
psql -U postgres -d postgres
psql (9.1.1) Введите "help" для получения справки. postgres = # СОЗДАТЬ РОЛЬ имя пользователя С ЛОГИН; СОЗДАТЬ РОЛЬ postgres = # \ пароль имя пользователя Введите новый пароль: Введите его еще раз: postgres = # СОЗДАТЬ БАЗУ ДАННЫХ testdb С именем пользователя OWNER; - имя пользователя имеет все права на testdb СОЗДАТЬ БАЗУ ДАННЫХ postgres = # РАЗРЕШИТЬ СОЕДИНЕНИЕ НА БАЗЕ ДАННЫХ otherdb TO имя пользователя; - имя пользователя теперь может подключаться к otherdb ГРАНТ postgres = # \ c otherdb Теперь вы подключены к базе данных "otherdb" как пользователь "postgres".otherdb = # GRANT SELECT ON test TO имя пользователя; - имя пользователя теперь может запрашивать (операторы SELECT) тестовую таблицу на otherdb. ГРАНТ
См. Главу 20. Роли баз данных в официальной документации PostgreSQL для получения дополнительной информации об управлении ролями.
Подробнее о GRANT и REVOKE см. В документации PostgreSQL,
Изменение кодировки по умолчанию для новых баз данных
При создании новой базы данных (например, с помощью createdb mydb
) PostgreSQL фактически копирует базу данных шаблона.Существует два предопределенных шаблона: template0 — это обычный шаблон, а template1 — это шаблон на сайте, который может изменять администратор, и используется по умолчанию. Чтобы изменить кодировку по умолчанию для новых баз данных, одним из вариантов является изменение локального шаблона1. Для этого войдите в оболочку PostgreSQL ( psql
) и выполните следующее:
1. Сначала нам нужно сбросить template1. Поскольку шаблоны не могут быть отброшены, нам сначала нужно изменить его на обычную базу данных:
ОБНОВЛЕНИЕ pg_database SET datistemplate = FALSE WHERE datname = 'template1';
2.После этого его можно уронить:
DROP DATABASE template1;
3. Следующим шагом будет создание новой базы данных из template0 с новой кодировкой по умолчанию. (Попался: в PostgreSQL Unicode является синонимом UTF-8.)
СОЗДАТЬ БАЗУ ДАННЫХ template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
4. Теперь нам нужно заменить template1 на шаблон:
ОБНОВЛЕНИЕ pg_database SET datistemplate = TRUE WHERE datname = 'template1';
5.(НЕОБЯЗАТЕЛЬНО) Если вы не хотите, чтобы кто-либо подключался к этому шаблону, установите для datallowconn значение FALSE:
ОБНОВЛЕНИЕ pg_database SET datallowconn = FALSE WHERE datname = 'template1';
Теперь вы можете создать новую базу данных, запустив из обычной оболочки:
пользователь $
createdb -U postgres testdb
Если вы снова войдете в psql и проверите базы данных, вы должны увидеть правильную кодировку вашей новой базы данных:
пользователь $
psql -U postgres -d postgres
psql (9.1.1) Введите "help" для получения справки. postgres = # \ l Список баз данных Имя | Владелец | Кодирование | Сортировка | Ctype | Права доступа ---------- + ---------- + ----------- + ----------- + ---- --- + ---------------------- testdb | postgres | UTF8 | C | C | postgres | postgres | SQL_ASCII | C | C | template0 | postgres | SQL_ASCII | C | C | = c / postgres : postgres = CTc / postgres template1 | postgres | UTF8 | C | C |
PostgreSQL — установите PostgreSQL, а затем создайте базу данных и учетную запись пользователя — CodingBee
Введение
Это руководство дает вам ускоренный курс по:
Объявление
Я выпустил свой новый курс на Udemy, Kubernetes By Example .Зарегистрируйтесь сейчас, чтобы получить бесплатный пожизненный доступ!- Установка программного обеспечения PostgreSQL на ваш сервер
- Создайте свою самую первую базу данных PostgreSQL — в нашем случае мы собираемся создать базу данных с именем «reviewdb»
- Создайте новую учетную запись пользователя БД и предоставьте ей полный доступ к новой БД
- Подключитесь к новой базе данных, используя новую учетную запись пользователя базы данных
- Удаленное подключение к новой базе данных с использованием новой учетной записи пользователя базы данных
- Повышение безопасности удаленных подключений
Установка программного обеспечения PostgreSQL на ваш сервер
Сначала загрузите rpm, используя curl / wget.Сначала решите, какой rpm-пакет postgresql вам нужен. например:
curl http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-oraclelinux93-9.3-1.noarch.rpm -o postgresql.rpm
затем, находясь в этом каталоге, установите его с помощью yum:
yum установить postgresql.rpm
В качестве альтернативы мы можем объединить приведенные выше команды curl + yum в одну команду и выполнить следующую команду вместо двух указанных выше команд:
yum install http: //yum.postgresql.org / 9.3 / redhat / rhel-6-x86_64 / pgdg-oraclelinux93-9.3-1.noarch.rpm
На самом деле он еще не установил postgres, он установил только репозиторий postgres yum, который в моем случае является репозиторием yum для postgres 9.3, это версия, которая меня интересует:
[root @ puppetmaster tmp] # ls -l /etc/yum.repos.d/ | grep "pgdg" -rw-r - r-- 1 root root 442 21 апреля 2014 pgdg-93-oraclelinux.repo
В моем случае я хочу установить postresql v9.3, поэтому я и буду искать это.
[root @ puppetmaster tmp] # ням поиск "postgresql93" Загруженные плагины: refresh-packagekit ================================================== ======================================== N / S Соответствует: postgresql93 ==== ================================================== ==================================== postgresql93-debuginfo.x86_64: Отладочная информация для пакета postgresql93 postgresql93-jdbc-debuginfo.x86_64: Отладочная информация для пакета postgresql93-jdbc postgresql93-odbc-debuginfo.x86_64: Отладочная информация для пакета postgresql93-odbc postgresql93-python-debuginfo.x86_64: отладочная информация для пакета postgresql93-python postgresql93.x86_64: клиентские программы и библиотеки PostgreSQL postgresql93-contrib.x86_64: добавленный исходный код и двоичные файлы, распространяемые с PostgreSQL postgresql93-devel.x86_64: файлы заголовков и библиотеки разработки PostgreSQL postgresql93-docs.x86_64: Дополнительная документация для PostgreSQL postgresql93-jdbc.x86_64: драйвер JDBC для PostgreSQL postgresql93-libs.x86_64: разделяемые библиотеки, необходимые для любых клиентов PostgreSQL postgresql93-odbc.x86_64: драйвер ODBC PostgreSQL postgresql93-plperl.x86_64: процедурный язык Perl для PostgreSQL postgresql93-plpython.x86_64: процедурный язык Python для PostgreSQL postgresql93-pltcl.x86_64: процедурный язык Tcl для PostgreSQL postgresql93-python.x86_64: Модуль разработки для кода Python для доступа к базе данных PostgreSQL postgresql93-server.x86_64: программы, необходимые для создания и запуска сервера PostgreSQL postgresql93-test.x86_64: набор тестов, распространяемый с PostgreSQL Только имя и краткое совпадение, для всего используйте "искать все".[root @ puppetmaster tmp] #
Два об / мин, которые мы выделили жирным шрифтом выше, — это те, которые нам нужны. Также есть еще один из перечисленных выше, который называется «postgresql93.x86_64», он устанавливает только клиентскую сторону, что полезно для проверки того, можете ли вы подключиться к своей базе данных postgresql с другой машины. Однако два вышеупомянутых также установят утилиту на стороне клиента.
Следовательно, мы идем дальше и устанавливаем их:
[root @ puppetagent01 ~] # yum install postgresql93-server postgresql93-contrib pgdg93 | 3.7 кБ 00:00 pgdg93 / primary_db | 147 кБ 00:01 Настройка процесса установки Разрешение зависимостей -> Выполняется проверка транзакции ---> Пакет postgresql93-contrib.x86_64 0: 9.3.6-1PGDG.rhel6 будет установлен -> Зависимость обработки: postgresql93 = 9.3.6 для пакета: postgresql93-contrib-9.3.6-1PGDG.rhel6.x86_64 -> Зависимость обработки: libpq.so.5 () (64 бит) для пакета: postgresql93-contrib-9.3.6-1PGDG.rhel6.x86_64 -> Зависимость обработки: libossp-uuid.so.16 () (64 бит) для пакета: postgresql93-contrib-9.3.6-1PGDG.rhel6.x86_64 ---> Будет установлен пакет postgresql93-server.x86_64 0: 9.3.6-1PGDG.rhel6 -> Выполняется проверка транзакции ---> Пакет postgresql93.x86_64 0: 9.3.6-1PGDG.rhel6 будет установлен ---> Пакет postgresql93-libs.x86_64 0: 9.3.6-1PGDG.rhel6 будет установлен ---> Пакет uuid.x86_64 0: 1.6.1-10.el6 будет установлен -> Завершенное разрешение зависимостей Решенные зависимости ================================================== ================================================== == Размер репозитория версии пакета Arch ================================================== ================================================== == Установка: postgresql93-contrib x86_64 9.3.6-1PGDG.rhel6 pgdg93 486 кбайт postgresql93-сервер x86_64 9.3.6-1PGDG.rhel6 pgdg93 4.1 M Установка для зависимостей: postgresql93 x86_64 9.3.6-1PGDG.rhel6 pgdg93 1.0 M postgresql93-libs x86_64 9.3.6-1PGDG.rhel6 pgdg93 191 кБ uuid x86_64 1.6.1-10.el6 public_ol6_latest 53 КБ Сводка транзакции ================================================== ================================================== == Установить 5 пакетов Общий размер загрузки: 5.8 млн Установленный размер: 23 M Это нормально [да / нет]: да Скачивание пакетов: (1/5): postgresql93-9.3.6-1PGDG.rhel6.x86_64.rpm | 1.0 МБ 00:03 (2/5): postgresql93-contrib-9.3.6-1PGDG.rhel6.x86_64.rpm | 486 кБ 00:00 (3/5): postgresql93-libs-9.3.6-1PGDG.rhel6.x86_64.rpm | 191 кБ 00:00 (4/5): postgresql93-server-9.3.6-1PGDG.rhel6.x86_64.rpm | 4,1 МБ 00:05 (5/5): uuid-1.6.1-10.el6.x86_64.rpm | 53 кБ 00:00 -------------------------------------------------- -------------------------------------------------- - Всего 348 кБ / с | 5.8 МБ 00:17 Запуск rpm_check_debug Запуск теста транзакции Проверка транзакции прошла успешно Выполняемая транзакция Установка: postgresql93-libs-9.3.6-1PGDG.rhel6.x86_64 1/5 Установка: postgresql93-9.3.6-1PGDG.rhel6.x86_64 2/5 Устанавливаем: uuid-1.6.1-10.el6.x86_64 3/5 Установка: postgresql93-contrib-9.3.6-1PGDG.rhel6.x86_64 4/5 Установка: postgresql93-server-9.3.6-1PGDG.rhel6.x86_64 5/5 Проверяем: uuid-1.6.1-10.el6.x86_64 1/5 Проверка: postgresql93-9.3.6-1PGDG.rhel6.x86_64 2/5 Проверка: postgresql93-server-9.3.6-1PGDG.rhel6.x86_64 3/5 Проверка: postgresql93-libs-9.3.6-1PGDG.rhel6.x86_64 4/5 Проверяем: postgresql93-contrib-9.3.6-1PGDG.rhel6.x86_64 5/5 Установлены: postgresql93-contrib.x86_64 0: 9.3.6-1PGDG.rhel6 postgresql93-server.x86_64 0: 9.3.6-1PGDG.rhel6 Установленная зависимость: postgresql93.x86_64 0: 9.3.6-1PGDG.rhel6 postgresql93-libs.x86_64 0: 9.3.6-1PGDG.rhel6 uuid.x86_64 0: 1.6.1-10.el6 Готово!
Вот быстрая проверка, что клиент командной строки postgresql, по крайней мере, был успешно установлен:
[root @ puppetagent01 ~] # psql --version psql (PostgreSQL) 9.3,6
Сейчас делаем:
[root @ puppetmaster tmp] # статус службы postgresql-9.3 postgresql-9.3 остановлен [root @ puppetmaster tmp] # service postgresql-9.3 initdb # запускает базу данных Инициализация базы данных: [OK] [root @ puppetmaster tmp] # chkconfig postgresql-9.3 on # это запускает эту службу во время загрузки [root @ puppetmaster tmp] #
Далее вы запускаете службу postgres:
[root @ puppetmaster tmp] # сервис postgresql-9.3 старт Запуск службы postgresql-9.3: [OK]
Вышеупомянутая установка сделала доступным набор утилит командной строки psql.
После этого нужно su пользователю postgres:
Учетная запись «postgres» была автоматически создана во время установки Postgres. Учетная запись «postgres» — это не только учетная запись Linux, но и учетная запись пользователя db, которая также автоматически создается во время установки postgres. Фактически, учетная запись пользователя «postgres» является эквивалентом Postgres «root» в Linux.
[корень @ puppetmaster tmp] # sudo -u postgres -i -bash-4.1 $ psql # затем введите командную строку postgresql. psql (9.3.5) Введите "help" для получения справки. postgres = #
Обратите внимание, что существует связь между учетной записью postgres linux и учетной записью postgres db. То есть, если вы запустите «psql» от имени пользователя postgres linux, то postgres автоматически предполагает, что вы хотите подключиться, используя соответствующую учетную запись пользователя db.
Обратите внимание на то, что мы использовали утилиту командной строки psql.
Создайте свою самую первую базу данных PostgreSQL
Прежде чем мы создадим нашу первую базу данных, давайте сначала рассмотрим список всех баз данных PostgreSQL, которые поставляются с Postgres из коробки, с помощью команды psql «\ l»:
postgres = # \ l Список баз данных Имя | Владелец | Кодирование | Сортировка | Ctype | Права доступа ----------- + ---------- + ---------- + ------------- + - ----------- + ----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + | | | | | postgres = CTc / postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + | | | | | postgres = CTc / postgres (3 ряда)
Теперь создаем собственную БД PostgreSQL. Для этого вам нужно сделать это из приглашения bash (пока вы все еще вошли в систему как пользователь postgres), а не из приглашения psql:
-баш-4.1 $ createdb reviewdb
В нашем случае мы создали базу данных с именем «reviewdb»
Обратите внимание, что при желании вы также можете удалить базу данных postgres.
Подтвердим, что он создан:
-bash-4.1 $ psql psql (9.3.5) Введите "help" для получения справки. postgres = # \ l Список баз данных Имя | Владелец | Кодирование | Сортировка | Ctype | Права доступа ----------- + ---------- + ---------- + ------------- + - ----------- + ----------------------- postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | reviewdb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + | | | | | postgres = CTc / postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + | | | | | postgres = CTc / postgres (4 ряда) postgres = #
Создание учетной записи пользователя PostgreSQL
Прежде чем мы создадим новую учетную запись пользователя db, мы должны сначала проверить, какая учетная запись пользователя db существует в настоящее время.Проверить это можно двумя способами: запустить запрос sql или использовать параметр «\ du»:
[root @ puppetagent01 ~] # su - postgres -bash-4.1 $ psql psql (9.3.6) Введите "help" для получения справки. postgres = # ВЫБРАТЬ имя ролика ИЗ pg_roles; Rolname ---------- Postgres геррит (2 ряда) postgres = # \ du Список ролей Имя роли | Атрибуты | Член -------------- + ----------------------------------- ------------- + ----------- gerritdbuser | | {} postgres | Суперпользователь, Создание роли, Создание БД, Репликация | {} postgres = #
Обратите внимание: дополнительную информацию о параметре «\ du» можно найти так:
-баш-4.1 $ psql psql (9.3.6) Введите "help" для получения справки. postgres = # help Вы используете psql, интерфейс командной строки для PostgreSQL. Введите: \ copyright для условий распространения \ h для справки по командам SQL \? для помощи с командами psql \ g или закончить точкой с запятой для выполнения запроса \ q выйти postgres = # \? генеральный \ copyright показать условия использования и распространения PostgreSQL \ g [ФАЙЛ] или; выполнить запрос (и отправить результаты в файл или | конвейер) \ gset [PREFIX] выполнить запрос и сохранить результаты в переменных psql \ h [NAME] справка по синтаксису команд SQL, * для всех команд \ q выйти из psql \ watch [SEC] выполнять запрос каждые SEC секунд .. . \ du [+] [ШАБЛОН] список ролей . . .
В нашем случае мы создали пользователя с именем «gerritdbuser» и установили пароль «admin123», а также предоставили права полного доступа к базе данных «reviewdb».
Теперь давайте создадим нового пользователя (у которого в нашем случае будет имя пользователя «gerritdbuser»). Для этого нам нужно подключиться к одной из уже существующих баз данных postgres, называемой «template1», для этого:
-bash-4.1 $ идентификатор uid = 26 (postgres) gid = 26 (postgres) groups = 26 (postgres) -баш-4.1 $ psql template1 psql (9.3.5) Введите "help" для получения справки. template1 = # СОЗДАТЬ ПОЛЬЗОВАТЕЛЬСКИЙ gerritdbuser С ПАРОЛЕМ 'admin123'; СОЗДАТЬ РОЛЬ template1 = # ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА БАЗЕ ДАННЫХ "reviewdb" gerritdbuser; ГРАНТ template1 = #
Теперь проверим, существует ли учетная запись gerritdbuser:
Это заполнитель.
Затем нам нужно передать полный контроль созданной нами базе данных reviewdb. Мы сделаем это в следующем разделе.
Предоставить право полного доступа к БД новой учетной записи пользователя
Это делается так:
-баш-4.1 $ id uid = 26 (postgres) gid = 26 (postgres) groups = 26 (postgres) -bash-4.1 $ psql шаблон1 psql (9.3.5) Введите "help" для получения справки. template1 = # ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА БАЗЕ ДАННЫХ "reviewdb" gerritdbuser; ГРАНТ template1 = #
Теперь мы можем проверить, что это было успешно, просмотрев последний столбец команды «\ l»:
Это заполнитель.
Подключитесь к новой базе данных с новой учетной записью пользователя базы данных
На этом этапе вы поймете, что когда вы запускаете psql отдельно, то по умолчанию psql будет предполагать, что вы хотите подключиться к базе данных с тем же именем учетной записи db, что и имя учетной записи Linux.Это означает, что psql завершится ошибкой, если вы попытаетесь запустить psql под учетной записью linux, у которой нет эквивалентной учетной записи базы данных с совпадающим именем. Например, мы не создали учетную запись базы данных с именем «root», следовательно,
На этом этапе вы должны иметь возможность выполнить следующую команду от имени пользователя postgress / root:
-bash-4.1 $ psql -h 127.0.0.1 -U gerritdbuser -d reviewdb psql: FATAL: не удалось выполнить аутентификацию идентификатора для пользователя gerritdbuser
Чтобы исправить это, нам нужно отредактировать следующий файл:
[данные root @ puppetmaster] # ls / var / lib / pgsql / 9.3 / данные / pg_hba.conf /var/lib/pgsql/9.3/data/pg_hba.conf
В этом файле вы найдете следующую строку:
хост все все 127.0.0.1/32 идент
Здесь вы просто заменяете «идент» на «доверие» и перезапускаете службу postgres.
Теперь, если вы повторите вызов psql, вы получите:
[root @ puppetagent01 ~] # psql -h 127.0.0.1 -U gerritdbuser -d reviewdb psql (9.3.6) Введите "help" для получения справки. reviewdb =>
Успех!
Удаленное подключение к серверу db
Теперь давайте попробуем подключиться, используя вместо этого IP-адрес устройства:
[root @ puppetagent01 ~] # psql -h 10.1.172.11 -U gerritdbuser -d reviewdb psql: не удалось подключиться к серверу: в соединении отказано Сервер работает на хосте «10.1.172.11» и принимает TCP / IP-соединения на порту 5432? [root @ puppetagent01 ~] #
Чтобы исправить это, вам необходимо сначала отредактировать следующий файл:
[корень @ puppetagent01 ~] # vi /var/lib/pgsql/9.3/data/postgresql.conf
В этом файле у нас есть настройка listen_addresses:
. . # ------------------------------------------------- ----------------------------- # ПОДКЛЮЧЕНИЯ И Аутентификация # ------------------------------------------------- ----------------------------- # - Настройки соединения - #listen_addresses = 'localhost' # какой IP-адрес (а) слушать; ..
раскомментируйте эту строку и установите для нее: «*», то есть:
. . # ------------------------------------------------- ----------------------------- # ПОДКЛЮЧЕНИЯ И Аутентификация # ------------------------------------------------- ----------------------------- # - Настройки соединения - #listen_addresses = 'localhost' # какой IP-адрес (а) слушать; listen_addresses = '*' # какой IP-адрес (а) слушать; . .
Примечание: в моем случае я продублировал эту строку перед ее редактированием.
Затем перезапустите службу postgres и попробуйте еще раз. Теперь вы должны получить следующее сообщение об ошибке:
[root @ puppetagent01 ~] # psql -h 10.1.172.11 -U gerritdbuser -d reviewdb psql: FATAL: нет записи pg_hba.conf для хоста «10.1.172.11», пользователя «gerritdbuser», базы данных «reviewdb», SSL отключен
Теперь давайте отредактируем наш pg_hba.conf и добавим запись для нашего IP-адреса, которым в данном случае будет «10.1.172.11». Следовательно, мы добавляем следующую строку:
хозяин все все 10.1.172.11 / 32 траст
Примечание: это почти то же самое, что и наша предыдущая запись 127.0.0.1.
Теперь перезапустите службу postgres и попробуйте еще раз:
[root @ puppetagent01 ~] # psql -h 10.1.172.11 -U gerritdbuser -d reviewdb psql (9.3.6) Введите "help" для получения справки. reviewdb => \ q [root @ puppetagent01 ~] #
Успех !!!
См. Также: http://dba.stackexchange.com/questions/14740/how-to-use-psql-with-no-password-prompt для повышения безопасности.
================================================= ======================
На клиентской машине:
yum install http: // yum.postgres "| grep" клиент " postgresql93.x86_64: клиентские программы и библиотеки PostgreSQL [root @ puppetagent03 ~] #
Итак, давайте, сделаем это сейчас:
[root @ puppetagent03 ~] # psql --version -bash: psql: команда не найдена [root @ puppetagent03 ~] # yum install postgresql93 Настройка процесса установки Разрешение зависимостей -> Выполняется проверка транзакции ---> Пакет postgresql93.x86_64 0: 9.3.6-1PGDG.rhel6 будет установлен -> Зависимость обработки: postgresql93-libs = 9.3.6-1PGDG.rhel6 для пакета: postgresql93-9.3.6-1PGDG.rhel6.x86_64 -> Зависимость обработки: libpq.so.5 () (64 бит) для пакета: postgresql93-9.3.6-1PGDG.rhel6.x86_64 -> Выполняется проверка транзакции ---> Пакет postgresql93-libs.x86_64 0: 9.3.6-1PGDG.rhel6 будет установлен -> Завершенное разрешение зависимостей Решенные зависимости ================================================== ================================================== ================================================== ================================================== ======= Размер репозитория версии пакета Arch ================================================== ================================================== ================================================== ================================================== ======= Установка: postgresql93 x86_64 9.3.6-1PGDG.rhel6 pgdg93 1.0 M Установка для зависимостей: postgresql93-libs x86_64 9.3.6-1PGDG.rhel6 pgdg93 191 кБ Сводка транзакции ================================================== ================================================== ================================================== ================================================== ======= Установить 2 пакета (ов) Общий размер загрузки: 1.2 млн Установленный размер: 5,8 м Это нормально [да / нет]: да Скачивание пакетов: (1/2): postgresql93-9.3.6-1PGDG.rhel6.x86_64.rpm | 1.0 МБ 00:01 (2/2): postgresql93-libs-9.3.6-1PGDG.rhel6.x86_64.rpm | 191 кБ 00:00 -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------- Всего 163 кБ / с | 1.2 МБ 00:07 Запуск rpm_check_debug Запуск теста транзакции Проверка транзакции прошла успешно Выполняемая транзакция Установка: postgresql93-libs-9.3.6-1PGDG.rhel6.x86_64 1/2 Установка: postgresql93-9.3.6-1PGDG.rhel6.x86_64 2/2 Проверка: postgresql93-libs-9.3.6-1PGDG.rhel6.x86_64 1/2 Проверка: postgresql93-9.3.6-1PGDG.rhel6.x86_64 2/2 Установлены: postgresql93.x86_64 0: 9.3.6-1PGDG.rhel6 Установленная зависимость: postgresql93-libs.x86_64 0: 9.3.6-1PGDG.rhel6 Готово! [root @ puppetagent03 ~] # psql --version psql (PostgreSQL) 9.3,6 [root @ puppetagent03 ~] #
Теперь, если мы попытаемся подключиться, мы получим следующее сообщение об ошибке:
[root @ puppetagent03 ~] # psql -h 10.1.172.11 -U gerritdbuser -d reviewdb psql: FATAL: нет записи pg_hba.conf для хоста «10.1.172.13», пользователя «gerritdbuser», базы данных «reviewdb», SSL отключен [root @ puppetagent03 ~] #
Это означает, что нашему клиентскому серверу удалось успешно связаться с сервером БД, но сервер БД отказал в соединении.
Чтобы исправить это, мы еще раз редактируем db-server, pg_hba.conf файл. На этот раз мы вставляем строку, представляющую IP-адрес клиентского сервера. В моем случае IP-адрес моего клиента — «10.1.172.13», поэтому вставьте:
хост все все 10.1.172.13/32 доверяют
По сути, это добавляет клиентский сервер в белый список.
Затем вставьте следующую строку в файл pg_hba.conf:
pg_hba.conf
Теперь давайте
— Вставьте следующую строку
разместить все все {vm-ip-number} / 32 доверять хост все все 127.0.0.1 / 32 доверие
Следующие вещи, которые, я думаю, нам нужно сделать:
— В файл pg_hba.conf:
[root @ puppetmaster data] # ls /var/lib/pgsql/9.3/data/pg_hba.conf
/var/lib/pgsql/9.3/data/pg_hba.conf
— открывает IP-таблицы для разрешения posgresql:
iptables -A INPUT -p tcp -s 0/0 --sport 1024: 65535 -d {db-server-ip-number} --dport 5432 -m state --state NEW, ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp -s {db-server-ip-number} --sport 5432 -d 0/0 --dport 1024: 65535 -m state --state ESTABLISHED -j ACCEPT
Обратите внимание: как только postgres найдет совпадение, он прекратит обработку этого файла.Поэтому вам нужно убедиться, что этот файл не содержит совпадений ранее, если да, то закомментируйте это.
— перезапустите службу postres, чтобы учесть это изменение.
автоматизация установки и настройки postgresql с помощью puppet
Все вышеперечисленное можно автоматизировать с помощью puppet which. Для этого у нас есть отдельная статья.
Примечание:
http://www.cyberciti.biz/tips/howto-iptables-postgresql-open-port.html
Полезные ссылки:
http: // www.postgresql.org/docs/9.3/static/tutorial-createdb.html
15 практических команд администрирования базы данных PostgreSQL
http://www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/
http://www.postgresql.org/docs/9.3/static/client-authentication.html
http://www.cyberciti.biz/faq/postgresql-remote-access-or-connection/
http://www.postgresql.org/docs/9.3/static/auth-pg-hba-conf.html
http: // www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/
http://www.postgresql.org/docs/9.3/static/client-authentication-problems.html
http://www.postgresql.org/docs/9.3/static/app-psql.html
http://www.postgresql.org/docs/9.3/static/reference-client.html (это все утилиты командной строки, поставляемые с postgres)
https://wiki.postgresql.org/wiki/YUM_Installation
http://www.postgresql.org/download/linux/redhat/
http: // yum.postgresql.org/repopackages.php
http://www.postgresql.org/docs/9.3/static/tutorial.html
PostgreSQL — База данных — Механизмы секретов
PostgreSQL — один из поддерживаемых подключаемых модулей для механизма секретов базы данных. Этот плагин динамически генерирует учетные данные базы данных на основе настроенных ролей для база данных PostgreSQL, а также поддерживает статические Роли.
См. Документацию по ядру секретов базы данных для дополнительные сведения о настройке механизма секретов базы данных.
Механизм секретов PostgreSQL использует pq, та же база данных библиотека в качестве хранилища PostgreSQL бэкэнд. Строка подключения параметры, включая параметры SSL, можно найти здесь
»Возможности
Имя подключаемого модуля | Вращение корневых учетных данных | Динамические роли | Статические роли |
---|---|---|---|
postgresql-database-plugin1073 |
»Настройка
Включить механизм секретов базы данных, если он еще не включен:
$ секреты хранилища включить базу данных Успех! Включен механизм секретов базы данных по адресу: database /
По умолчанию механизм секретов включается при имени механизма.Чтобы включить механизм секретов на другом пути, используйте аргумент
-path
.Настройте Vault, указав соответствующий плагин и информацию о подключении:
$ vault write database / config / my-postgresql-database \ plugin_name = postgresql-база-плагин \ allowed_roles = "моя-роль" \ connection_url = "postgresql: // {{имя пользователя}}: {{пароль}} @localhost: 5432 /" \ username = "vaultuser" \ пароль = "vaultpass"
Настройте роль, которая сопоставляет имя в Vault с оператором SQL для выполнения создать учетные данные базы данных:
$ хранилище записать базу данных / роли / моя-роль \ db_name = моя база данных postgresql \ Creation_statements = "СОЗДАТЬ РОЛЬ \" {{name}} \ "С ПАРОЛЕМ ДЛЯ ВХОДА '{{пароль}}' ДЕЙСТВИТЕЛЬНО ДО '{{expiration}}'; \ GRANT SELECT ДЛЯ ВСЕХ ТАБЛИЦ В СХЕМЕ public TO \ "{{name}} \"; "\ default_ttl = "1ч" \ max_ttl = "24 часа" Успех! Данные, записываемые в: базу данных / роли / мою роль
»Использование
После того, как механизм секретов настроен и у пользователя / машины есть токен Vault с надлежащее разрешение, он может генерировать учетные данные.