- 在 PostgreSQL 里创建一个新用户(角色);
- 在该用户下创建一张表;
- 用新用户身份登录并插入/查询数据。
- 所有命令在 Ubuntu + PG 17 下测试通过,其他版本同样适用。
准备:用超级用户(postgres)登录 ``` # 切换到操作系统用户 postgres sudo -iu postgres # 用 psql 连到默认库 postgres psql ``` ``` postgres@ii:/ai/app/pg/data$ psql psql (17.6) Type "help" for help. postgres=# ``` 创建新用户(角色)并设密码 ``` -- 创建登录角色,用户名为 demo_user,密码 123456 CREATE ROLE tpf LOGIN PASSWORD 'Book_1234'; -- 为其创建一个同名数据库(方便后续连接) CREATE DATABASE db1 OWNER tpf; -- 赋予该用户在自有数据库里创建对象的权限 GRANT CREATE ON SCHEMA public TO tpf; ``` 退出超级用户,改用新用户登录 ``` # 退出 psql \q # 用新用户身份连接到自己的库 psql -U tpf -d db1 -h 127.0.0.1 -W ``` |
|
我来帮你创建这个 PostgreSQL 用户并配置远程访问权限。
## 1. 创建用户和数据库
```sql
-- 创建用户 tpf,密码为 Book_1234
CREATE USER tpf WITH PASSWORD 'Book_1234';
-- 创建数据库 db1
CREATE DATABASE db1;
-- 将数据库所有权授予 tpf(可选,根据需要)
GRANT ALL PRIVILEGES ON DATABASE db1 TO tpf;
```
## 2. 配置 PostgreSQL 允许所有 IP 访问
需要修改两个配置文件:
### 2.1 修改 `postgresql.conf`
找到并修改监听地址:
```bash
# 文件位置(根据你的系统可能不同):
# Linux: /etc/postgresql/版本号/main/postgresql.conf
# 或 /var/lib/pgsql/data/postgresql.conf
listen_addresses = '*' # 将原来的 localhost 改为 *,表示监听所有IP
```
### 2.2 修改 `pg_hba.conf`
添加允许所有 IP 访问的规则:
```bash
# 文件位置(与 postgresql.conf 同目录)
# 在文件末尾添加:
# IPv4 所有IP允许连接
host all all 0.0.0.0/0 md5
# IPv6 所有IP允许连接(如需要)
host all all ::/0 md5
```
## 3. 重启 PostgreSQL 服务
```bash
# Linux 系统
sudo systemctl restart postgresql
# 或
sudo service postgresql restart
```
## 4. 验证连接
使用你的 Go 代码连接:
```go
db, err = sql.Open("postgres", "host=127.0.0.1 port=5432 user=tpf password=Book_1234 dbname=db1 sslmode=disable")
```
---
## ⚠️ 安全提示
`0.0.0.0/0` 表示允许**任何 IP** 连接,这在生产环境中存在安全风险。建议:
| 场景 | 推荐配置 |
|------|---------|
| 本地开发 | `host all all 127.0.0.1/32 md5` |
| 指定网段 | `host all all 192.168.1.0/24 md5` |
| 生产环境 | 使用防火墙 + VPN,或限制特定 IP |
如需更严格的权限控制,可以指定仅允许 `tpf` 用户访问 `db1` 数据库:
```bash
host db1 tpf 0.0.0.0/0 md5
```
|
|
|
|
|
https://ftp.postgresql.org/pub/source/
https://ftp.postgresql.org/pub/source/v17.6/postgresql-17.6.tar.gz
准备
```
sudo apt update
sudo apt install bison flex libreadline-dev
```
```
sudo su - root
mkdir -p /ai/app/pg/
rsync -rltDv /mnt/g/soft/pub_source_v17.6_postgresql-17.6.tar.gz /ai/app/pg/
adduser postgres
chown -R postgres /ai/app/pg/
su - postgres
cd /ai/app/pg/
mkdir -p /ai/app/pg/data
mkdir -p /ai/app/pg/walback
PGHOME=/ai/app/pg
PGDATA=$PGHOME/data
ARCLOG_PATH=$PGHOME/walback
PATH=$PGHOME/bin:$PATH
export PGHOME PGDATA ARCLOG_PATH PATH
```
安装
postgres@ii:/ai/app/pg$ tar -xvf pub_source_v17.6_postgresql-17.6.tar.gz
```
cd postgresql-17.6/
./configure --prefix=/ai/app/pg
make
make install
```
初始化及启动
```
initdb
pg_ctl -D /ai/app/pg/data -l logfile start
pg_ctl start
psql -U postgres
postgres=# \password
Enter new password for user "postgres":Book_1234
Enter it again:
postgres-# \q
```
|
|
postgresql.conf配置文件 - 修改data目录下的pg_hba.conf配置文件,将IPv4 local connections下面的一行改为如下所示: ``` cd /ai/app/pg/data vim postgresql.conf listen_addresses='*' port = 5432 max_connections = 30 ``` 重启PostgreSQL服务:
pg_ctl restart
pg_ctl stop
pg_ctl start
监听
```
postgres@ii:/ai/app/pg/data$ netstat -tunlp|grep 5432
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 12954/postgres
tcp6 0 0 :::5432 :::* LISTEN 12954/postgres
```
|
|
|
|
|
|
|