Làm thế nào để tạo người dùng cho một db trong postgresql? [đóng cửa]


199

Tôi đã cài đặt PostgreSQL 8.4 trên máy chủ CentOS của mình và kết nối với người dùng root từ shell và truy cập shell PostgreQuery.

Tôi đã tạo cơ sở dữ liệu và người dùng trong PostgreSQL.

Trong khi cố gắng kết nối từ tập lệnh PHP của tôi, nó cho thấy tôi xác thực thất bại.

Làm cách nào để tạo một người dùng mới và cách cấp quyền cho họ cho một DB cụ thể?


chính xác thông báo lỗi là gì? bạn có thể đăng nhập psqltừ dòng lệnh không?
a_horse_with_no_name

25
Làm thế nào trên thế giới này đã bị đóng cửa như lạc đề?
Ben Creasy

@BenCreasy có lẽ vì nó phù hợp hơn với serverfault.com hoặc superuser?
knocte

2
@knocte vì vậy tôi cho rằng bạn đang nói rằng nó nằm dưới 6 tuổi, ngoại trừ "trừ khi chúng liên quan trực tiếp đến các công cụ lập trình hoặc lập trình", và tôi cho rằng postgres không được tính là một công cụ lập trình? mất thú vị
Ben Creasy

Câu trả lời:


339

Từ CLI:

$ su - postgres 
$ psql template1
template1=# CREATE USER tester WITH PASSWORD 'test_password';
template1=# GRANT ALL PRIVILEGES ON DATABASE "test_database" to tester;
template1=# \q

PHP (như đã thử nghiệm trên localhost, nó hoạt động như mong đợi):

  $connString = 'port=5432 dbname=test_database user=tester password=test_password';
  $connHandler = pg_connect($connString);
  echo 'Connected to '.pg_dbname($connHandler);

14
Đối với Ubuntu, nó phải làsudo su - postgres
Hengjie

57
Đối với Ubuntu, nó thực sự phải là: sudo -u postgres psql
Mario

2
Tôi nghĩ rằng cách dễ nhất để ban hành các lệnh sẽ là:psql -U postgres -c "CREATE ROLE..."
Hugo Mota

31
Chỉ cần nhớ rằng tất cả những thứ bạn nhập và chạy trong shell thường kết thúc trong lịch sử shell, bao gồm cả mật khẩu bạn đã chọn.
Amn

7
nhận thấy sự khác biệt giữa '"trong các lệnh!
andilabs

42

Tạo người dùng bằng mật khẩu:

http://www.postgresql.org/docs/civerse/static/sql-createuser.html

CREATE USER name [ [ WITH ] option [ ... ] ]

where option can be:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

Sau đó cấp quyền người dùng trên cơ sở dữ liệu cụ thể:

http://www.postgresql.org/docs/civerse/static/sql-grant.html

Thí dụ :

grant all privileges on database db_name to someuser;

1
Tôi đã thực hiện điều này: tạo ravi người dùng bằng mật khẩu 'ravi'; cấp tất cả các đặc quyền trên cơ sở dữ liệu nomatim cho ravi; Nhưng tôi không thể kết nối với mã PHP sau: <? Php $ ConnString = 'host = localhost port = 5432 dbname = nomatim user = ravi password = ravi'; $ ConnHandler = pg_connect ($ ConnString); echo 'Đã kết nối với' .pg_dbname ($ ConnHandler); ?>

@Darji Krunal: lỗi PHP là gì, nó trông như thế nào?
Vidul

1
cấp tất cả các đặc quyền * ...
Arpit Singh
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.