如何在PostgreSQL中为数据库创建用户?[关闭]


199

我已经在我的CentOS服务器上安装了PostgreSQL 8.4,并通过shell和访问PostgreSQL shell连接到root用户。

我在PostgreSQL中创建了数据库和用户。

尝试从我的PHP脚本进行连接时,它显示身份验证失败。

如何创建新用户,以及如何为特定数据库授予权限?


错误消息到底是什么?您可以psql从命令行登录吗?
a_horse_with_no_name 2012年

24
这在世界上是如何成为题外话的?
Ben Creasy

@BenCreasy也许是因为它更适合serverfault.com或超级用户?
knocte

2
@knocte,所以我想你是说它在6以下,“除非它们直接涉及编程或编程工具”,否则我认为postgres不算作编程工具吗?有趣的事情
Ben Creasy

Answers:


339

从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(在localhost上测试,可以正常工作):

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

14
对于Ubuntu,应该是sudo su - postgres
Hengjie

57
对于Ubuntu,它实际上应该是:sudo -u postgres psql
Mario

2
我认为发出命令的最便捷的方式是:psql -U postgres -c "CREATE ROLE..."
雨果·莫塔

31
只要记住,您在shell中键入并运行的所有内容通常都会出现在shell历史记录中,包括您选择的密码。
2014年

7
注意命令'和之间的区别"
andilabs

42

使用密码创建用户:

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

然后授予特定数据库上的用户权限:

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

范例:

grant all privileges on database db_name to someuser;

1
我已经做到了:使用密码“ ravi”创建用户ravi;向ravi授予数据库nominatim的所有特权;但是我无法连接以下PHP代码:<?php $ connString ='host = localhost端口= 5432 dbname = nominatim user = ravi password = ravi'; $ connHandler = pg_connect($ connString); echo'已连接到'.pg_dbname($ connHandler); ?>

@Darji Krunal:什么是PHP错误,它看起来如何?
Vidul 2012年

1
授予所有特权* ...
Arpit Singh 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.