.pgpass với postgreSQL không hoạt động


13

Tôi đã đặt tệp .pgpass trong /folder/.pgpass và nó trông như thế này

*:*:*:postgres:password_for_postgres

Tôi có một tập lệnh bash nơi tôi sao lưu cơ sở dữ liệu từ postgreSQL:

#!/bin/bash
export PGPASSFILE=/folder/.pgpass
echo $PGPASSFILE
pg_dump --username=postgres --format=c --file=/backup/db/db.sqlc database

Tuy nhiên, kịch bản vẫn hứa cho tôi mật khẩu. PGPASSFILE có giá trị như nó cần, theo như tôi có thể thấy. Bất kỳ gợi ý về những gì vấn đề có thể được?

/ K

Câu trả lời:


8

Tập tin pgpass có được đặt ở chế độ 0600 không (tức là chỉ đọc / ghi bởi chủ sở hữu)? Thư viện khách sẽ bỏ qua nó nếu nó có thể đọc được theo nhóm hoặc trên thế giới.


5

Trên cấu hình của tôi ( Ubuntu 10.04.3PostgreSQL 8.4), cuối cùng tôi cũng có thể làm cho nó hoạt động khi tên người dùng tôi đăng nhập giống như tên tôi đang cố lấy mật khẩu từ .pgpasstệp.

Đăng nhập như là deployer, tôi đã cố gắng sử dụng .pgpasstệp để truy cập cơ sở dữ liệu thuộc sở hữu của một tên người dùng appname, không có người dùng Unix tương đương. Tôi không thể thực hiện .pgpasscông việc, cho đến khi tôi bắt đầu sử dụng deployervới tư cách là người dùng để truy cập cơ sở dữ liệu của mình ...

Đây là /home/deployer/.pgpassnội dung tập tin của tôi :

*:*:*:deployer:password

Đây là một phần của /etc/postgresql/8.4/main/pg_hba.confmột:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD                                                

# "local" is for Unix domain socket connections only                                                        
local   all         all                               md5                                                   
# IPv4 local connections:                                                                                   
host    all         all         127.0.0.1/32          md5                                                   
host    all         all         192.168.0.1/32        md5                                                   
# IPv6 local connections:                                                                                   
host    all         all         ::1/128               md5 

Như bạn có thể thấy, tất cả các kết nối của tôi yêu cầu mật khẩu ( md5).

Với cấu hình này, giả sử tôi có một cơ sở dữ liệu tôi đã tạo bằng lệnh này:

deployer@ubuntu-server:~$ createdb -T template0 -O deployer -E UTF8 dbname

Tôi có thể thực hiện thao tác sau mà không cần nhập mật khẩu:

deployer@ubuntu-server:~$ dropdb dbname

Ngay khi tôi đổi tên của mình .pgpassthành .pgpass-no, nó sẽ yêu cầu mật khẩu.

BTW, đừng quên rằng .pgpasstệp của bạn phải được cấp 0600phép:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass

2
Bạn có thể điều khiển người dùng pg kết nối bằng cách sử dụng -Ucờ đến dropdbcreatedb
Kevin Horn

0

1) Tạo tệp .pgpass có nội dung

máy chủ lưu trữ: 5432: somedb: someuser: somepass

2) đặt quyền bằng lệnh

sudo chmod 600 .pgpass

3) Đặt chủ sở hữu tệp là cùng một người dùng sử dụng mà bạn đã đăng nhập:

sudo chown login_username: login_username .pgpass

4) Đặt biến môi trường PGPASSFILE:

xuất PGPASSFILE = '/ nhà / người dùng / .pgpass'

Bây giờ hãy kiểm tra bằng cách kết nối với cơ sở dữ liệu:

máy chủ ps -h -U một số người dùng somedb

Tôi sẽ không nhắc mật khẩu và đăng nhập vào postgresql.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.