PostgreSQL_14.2安装步骤
自动安装脚本下载:postgresql-14.2官网源码&_自动安装脚本.rar
#创建postgres用户(数据库初始化用到)
useradd postgres
#设置用户密码
passwd postgres
#创建pgsql目录
mkdir /usr/local/pgsql
#用户授权
chown -R postgres.postgres /usr/local/pgsql
# 创建数据库文件夹
mkdir -p /data/postgresql_data
#授权postgres用户data权限
chown -R postgres.postgres /data/postgresql_data/
chmod 777 /data
#创建安装目录
mkdir /usr/local/pgsql
cd /usr/local/pgsql
#下载源码包
wget https://ftp.postgresql.org/pub/source/v14.2/postgresql-14.2.tar.gz
#解压到pgsql目录
# 解压
tar -zxvf postgresql-14.2.tar.gz
cd ~/postgresql-14.2
# 安装必要依赖
yum install -y bison flex readline-devel zlib-devel
yum install docbook-dtds docbook-style-xsl fop libxslt -y
yum install -y gcc
# 配置编译
./configure --prefix=/usr/local/pgsql/postgresql-14.2
# 编译
make
make install
#必须切换到postgres用户才能初始化
su postgres
# 初始化数据库
/usr/local/pgsql/postgresql-14.2/bin/initdb -D /data/postgresql_data/
启动数据库
/usr/local/pgsql/postgresql-14.2/bin/pg_ctl -D /data/postgresql_data/ -l logfile start
停止数据库
/usr/local/pgsql/postgresql-14.2/bin/pg_ctl -D /data/postgresql_data/ stop
重启数据库
/usr/local/pgsql/postgresql-14.2/bin/pg_ctl restart -D /data/postgresql_data/ -m fast
#修改配置
cd /data/postgresql_data/
cp postgresql.conf postgresql.conf.bak
vi postgresql.conf
#修改listen_addresses, #defaults to 'localhost'; use '*' for all。
listen_addresses = '*'
#连接数 增大一些,默认100连接数不够用,如果做主从配置,从库需要比主库大,可将从库设置为1100
max_connections = 1000
修改默认端口号(默认端口号5432)
port = 5433
#修改连接认证方式
vi /data/postgresql_data/pg_hba.conf
在文件底部,增加如下配置
host all all 0.0.0.0/0 scram-sha-256
#注意:最后一个单词不要用trust,建议用scram-sha-256,原因如下:
#修改环境变量
vi ~/.bash_profile
增加配置
export PGHOME=/usr/local/pgsql/postgresql-14.2
export PGDATA=/data/postgresql_data
export PATH=$PATH:$PGHOME/bin
#刷新使配置生效
source ~/.bash_profile
#查看环境变量
echo $PATH
#设置开机自启动(需要root用户)
cd /usr/local/pgsql/postgresql-14.2/contrib/start-scripts
chmod a+x linux
cp linux /etc/init.d/postgresql
vi /etc/init.d/postgresql
#修改配置文件:三个地方PGUSER、prefix、PGDATA,如下
# PGUSER是一个非root用户(这里的PGUSER是postgres)
PGUSER=postgres
prefix=/usr/local/pgsql/postgresql-14.2
PGDATA="/data/postgresql_data"
#开机自启生效
chkconfig --add postgresql
chkconfig
#启动服务
service postgresql start
ps -ef | grep postgres
#修改初始密码
#尽量用强力密码:大写+特殊符号+小写+数字
psql -U postgres -p 5433
ALTER USER postgres with encrypted password '你的密码xxxx';
\q
权限控制
参考:blog/20150601_01.md at master · digoal/blog · GitHub
1. 权限管理
最危险的就是最容易暴露的数据库用户,当然是应用连接数据库的账号(以下简称应用账号)。
应用账号权限越大,应用程序被攻击后破坏性就越大。
例如用户有删数据库,删表,删索引,删表空间,删SCHEMA,删函数等等这样的权限的话,危害极大。
安全建议:
1.1 使用超级用户创建数据库(查看所有数据库:\l)
CREATE DATABASE db_test;
1.2 切换数据库(\c),并创建数据库的SCHEMA(查看所有命名空间:\dn)
\c db_test;
CREATE SCHEMA db_schema;
1.3 创建dev开发账号角色(查看所有用户:\du)
CREATE USER dev;
1.4 修改dev用户密码
ALTER USER dev with encrypted password 'dev的密码';
1.5 回收数据库,schema,language,应用对象的public权限。
revoke all on schema db_schema from public;
revoke all on language plpgsql from public;
revoke all on database postgres from public;
revoke all on table ... from public;
revoke all on function ... from public;
......
1.6 将数据库,schema的使用权限赋予给应用账号。
grant usage on schema db_schema to dev;
grant connect on database db_test to dev;
1.7 将应用需要访问的对象的相关权限赋予给应用账号。
例如赋予dev用户所有表的select,insert,update,delete权限:
GRANT select,insert,update,delete ON ALL TABLES IN SCHEMA public TO dev;
或者赋予dev用户所有表的所有权限:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dev;
1.8 不要忘记序列(自增键)属性授权:
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO dev;
这样,应用账号只有对象的使用权限,没有对象的DROP,TRUNCATE,REPLACE权限,相对来说是更安全的。
为了安全起见,安装完成后禁用掉postgres用户ssh远程登陆:
在/etc/ssh/sshd_config配置文件中设置DenyUsers选项,格式如下:
# 拒绝 postgres 帐户通过 SSH 登录系统
DenyUsers postgres
配置完成需要重启SSHD服务
[root@dev ~]# service sshd restart
The End!
参考资料
-----------------------------------------------------------------------
#postgresql 主从集群安装
postgresql 主从集群安装 - 江流大海_浮萍如尘 - 博客园
#创建dev只读用户
参考:PostgreSQL创建只读用户 - 简书
#用户管理指令
参考:PostgreSQL:十三. PostgreSQL的用户管理_cui_yonghua的博客-CSDN博客
#postgresql.conf参数配置
参考:postgresql.conf参数配置_王翔:的博客-CSDN博客
PostgreSQL之autovacuum自动清理
参考:PostgreSQL之autovacuum - 简书
PostgreSQL日常维护手册
参考:PostgreSQL实用日常维护SQL · postgresql手册 · 看云