如何在PostgreSQL中为数据库创建用户?

237

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

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

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

我应该如何创建一个新用户,并为特定的数据库授予他们权限?


错误信息具体是什么?您能否通过命令行从psql登录? - user330315
2个回答

385

从命令行界面:

$ 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(在本地测试,按预期工作):

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

18
对于Ubuntu系统,应该使用sudo su - postgres命令。 - Hengjie
62
对于Ubuntu来说,真正应该使用的是:sudo -u postgres psql。 - Mario
4
我认为最便携的发出命令的方法是:psql -U postgres -c "CREATE ROLE..." - Hugo Mota
35
请记住,您在Shell中键入并运行的所有内容通常都会出现在Shell历史记录中,包括您选择的密码。 - Armen Michaeli
7
注意命令中的 '" 的区别!请注意不要改变原意,使内容更通俗易懂。 - andilabs
显示剩余3条评论

51

创建带有密码的用户:

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
我已经完成了以下操作: create user ravi with password 'ravi'; grant all privileges on database nominatim to ravi;但是,我无法使用以下PHP代码连接: <?php $connString = 'host=localhost port=5432 dbname=nominatim user=ravi password=ravi'; $connHandler = pg_connect($connString); echo 'Connected to '.pg_dbname($connHandler); ?> - user925355
@Darji Krunal:PHP错误是什么,它看起来像什么? - Vidul
1
授予所有权限*... - Arpit Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接