PostrgeSQL - Установка и настройка
Установка
- $ sudo apt-get install postgresql postgresql-contrib
- $ passwd postgres
- $ sudo su - postgres
- $ psql postgres
Homebrew plst
nano /usr/local/Cellar/postgresql-9.4/9.4.5/homebrew.mxcl.postgresql.plist
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <true/> <key>Label</key> <string>homebrew.mxcl.postgresql.plist</string> <key>ProgramArguments</key> <array> <string>/usr/local/Cellar/postgresql-9.4/9.4.5/bin/postgres</string> <string>-D</string> <string>/usr/local/var/postgres</string> <string>-r</string> <string>/usr/local/var/postgres/server.log</string> </array> <key>RunAtLoad</key> <true/> <key>WorkingDirectory</key> <string>/usr/local/var</string> <key>StandardErrorPath</key> <string>/usr/local/var/postgres/server.log</string> </dict> </plist>
Настройка доступа
Не безопасно, даем внешний доступ для IP 192.168.1.1 (можно использовать маски сети)
Для подключения извне, также необходимо включить прослушивания внешнего IP
в настройках /etc/postgresql/X.Y/main/postgresql.conf
nano /etc/postgresql/X.Y/main/pg_hba.conf
# Database administrative login by Unix domain socket #local all postgres peer # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only #local all all peer # IPv4 local connections: #host all all 127.0.0.1/32 md5 # IPv6 local connections: #host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 md5 host replication all ::1/128 md5 local all all trust host all all ::1/128 trust host all all 127.0.0.1/32 trust host all all 192.168.1.1/32 trust
Предыдущие однотипные записи должны быть закомментированы
Это однотипные записи
#local all all peer local all all trust
- ADDRESS - Соответсвует маске
- METHOD - Метод-аутентификации
методы аутентификации
trust
Разрешает безусловное подключение. Этот метод позволяет тому, кто может подключиться к серверу с базой данных Postgres Pro, войти под любым желаемым пользователем Postgres Pro без введения пароля и без какой-либо другой аутентификации.
ident
Получает имя пользователя операционной системы клиента, связываясь с сервером Ident, и проверяет, соответствует ли оно имени пользователя базы данных. Аутентификация ident может использоваться только для подключений по TCP/IP. Для локальных подключений применяется аутентификация peer
peer
Получает имя пользователя операционной системы клиента из операционной системы и проверяет, соответствует ли оно имени пользователя запрашиваемой базы данных. Доступно только для локальных подключений.
md5
scram-sha-256
Проверяет пароль пользователя, производя аутентификацию SCRAM-SHA-256 или MD5.
Проверка доступа
$ psql -U postgres -h localhost $ psql -U postgres
Вопрос/Ответ
Пользователи
- Как создать пользователя в PostgreSQL?
- CREATE USER ramesh WITH password ‘tmppassword’;
- Как посмотреть список пользователей?
- SELECT * FROM pg_shadow;
- Как сменить пароль у пользователя?
- ALTER USER postgres WITH PASSWORD 'password';
Смена пароля
Включаем однопользовательский режим nano /usr/local/opt/postgresql/pg_hba.conf
local all all trust
- подключаемся к бд, указывая локального пользователя (в моем случае mirocow)
- меняем пароль у пользователя mirocow
включаем многопользовательский режим добавляем строчку в nano /usr/local/opt/postgresql/pg_hba.conf
local all postgres password
Права
Смена прав
- ALTER TABLE sequence_name OWNER TO владелец
Привелегии
- Как посмотреть привелегии пользователя?
SELECT n.nspname as "Схема", c.relname as "Таблица", c.relacl as "Привилегии доступа" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('r', 'v', 'S') AND pg_catalog.pg_table_is_visible(c.oid) /*AND n.nspname !~ '^pg_'*/ ORDER BY 1, 2;
- Как дать привелегии
- GRANT ALL ON DATABASE demodb TO demo;
Базы
- Как создать базу в PostgreSQL?
- CREATE DATABASE mydb WITH OWNER ramesh;
- Как удалить базу в PostgreSQL?
- DROP DATABASE mydb;
- Как получить весь список баз в Postgresql?
- SELECT datname FROM pg_database;
- SELECT * FROM pg_database;
Таблицы
- Как вывести список всех таблиц?
- SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';