Bagaimana cara membuat pengguna untuk db di postgresql? [Tutup]

199

Saya telah menginstal PostgreSQL 8.4 di server CentOS saya dan terhubung ke pengguna root dari shell dan mengakses shell PostgreSQL.

Saya membuat basis data dan pengguna di PostgreSQL.

Ketika mencoba untuk terhubung dari skrip PHP saya itu menunjukkan saya gagal otentikasi.

Bagaimana cara membuat pengguna baru dan bagaimana memberikan izin kepada mereka untuk DB tertentu?

pengguna
sumber
apa sebenarnya pesan kesalahannya? dapatkah Anda masuk melalui psqldari commandline?
a_horse_with_no_name
25
Bagaimana di dunia ini ditutup sebagai di luar topik?
Ben Creasy
@ BenCreasy mungkin karena itu lebih tepat untuk serverfault.com atau superuser?
knocte
2
@knocte jadi saya kira Anda mengatakan itu berada di bawah 6 yang memiliki pengecualian "kecuali mereka secara langsung melibatkan pemrograman atau alat pemrograman", dan saya kira postgres tidak dihitung sebagai alat pemrograman? take menarik
Ben Creasy

Jawaban:

339

Dari 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 (seperti yang diuji pada localhost, berfungsi seperti yang diharapkan):

  $connString = 'port=5432 dbname=test_database user=tester password=test_password';
  $connHandler = pg_connect($connString);
  echo 'Connected to '.pg_dbname($connHandler);
Vidul
sumber
14
Untuk Ubuntu seharusnyasudo su - postgres
Hengjie
57
Untuk Ubuntu seharusnya: sudo -u postgres psql
Mario
2
Saya pikir cara yang paling portabel untuk mengeluarkan perintah adalah:psql -U postgres -c "CREATE ROLE..."
Hugo Mota
31
Ingatlah bahwa semua hal yang Anda ketik dan jalankan di shell biasanya berakhir di histori shell, termasuk kata sandi yang Anda pilih.
amn
7
perhatikan perbedaan antara 'dan "dalam perintah!
andilabs
42

Buat pengguna dengan kata sandi:

http://www.postgresql.org/docs/current/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

Kemudian berikan hak pengguna pada basis data tertentu:

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

Contoh:

grant all privileges on database db_name to someuser;
Denys Séguret
sumber
1
Saya sudah melakukan ini: membuat pengguna ravi dengan kata sandi 'ravi'; memberikan semua hak istimewa pada nominatime basis data ke ravi; Tetapi saya tidak dapat terhubung dengan kode PHP berikut: <? Php $ connString = 'host = localhost port = 5432 dbname = nominatim user = ravi password = ravi'; $ connHandler = pg_connect ($ connString); echo 'Terhubung ke' .pg_dbname ($ connHandler); ?>
@ Darji Krunal: apa kesalahan PHP, bagaimana kelihatannya?
Vidul
1
berikan semua hak istimewa * ...
Arpit Singh