请问PgSQL中如何对一个数据库设用户权限

请问PgSQL中如何对一个数据库设用户权限

刚学PgSQL,费了九牛二虎之力才“研究”出怎样在命令界面查看数据库和用户 :p

    但数据库的权限问题此终搞不明白,特来请教。例如我现在有两个数据库testdb和mydb,建了一个普通用户testuser(不是超级用户,不能creatdb和creatuser),testuser是且仅是数据库testdb的owner(用\l+检查通过)。以为testuser只能对testdb有权限,但却发现它还可以在mydb建table等。
    请问pgsql怎样对一个数据库给用户或组授权?象上面的例子如何能使testuser无权访问mydb,和如何建只读权限的用户?还想请教一下说明文档中对session授权是什么意思?多谢多谢      
可以直接写到系统数据库里。你可以用这个命令先看看:
#su - postgres  ----进到数据库的超级用户
$psql template1
psql template1
Welcome to psql 7.3.5, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit
template1=# select * from pg_user;
usename | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
---------+----------+-------------+----------+-----------+----------+----------+-----------
postgres   |        1 | t           | t        | t         | ******** |          |

你可以直接用update对pg_shadow表进行操作。      
你的意思是直接修改pg_shadow表来设权限吗?现在testuser在字段usecreatedb|usesuper|usecatupd中的值都为f,但还是有权限在mydb中添加表。能不能以我的例子说明一下该怎样设呢?
    另外我尝试用REVOKE来删除testuser的权限,但怎样试都只能对mydb中的某个表的权限修改,无法对整个mydb数据库修改权限。尝试用命令
REVOKE ALL privileges ON DATABASE mydb from testuser;
删除,虽然没有报错,但也没有任何实际效果。

真是搞得晕了,还是要请bwb多多赐教      
好长时间没有维护PGSQL了,有点忘。
你可以完全不用PGSQL的外部命令,就将pg_shandow当成一个普通的数据库,然后就可以用插入命令来完成对该库的操作:
template1=# select * from pg_shadow;先看看pg_shadow里有什么
template1=# update pg_shadow set  usecreatedb = 'f' where usename = 'db_username' ;
UPDATE 1
template1=# select * from pg_shadow;再看看是不是已经将usecreatedb的创建数据库的属性改成false了?
当然也可以改成true即't'。
提醒一点,在LINUX下习惯从root不要密码转到postgres下,不要设postgres的系统用户,比较安全。      
最近发现PostgreSQL7.4.X版本的用户密码采用了MD5,在pg_shadow中和MySQL一样不再明码显示用户密码,所以必须使用如下SQL命令添加用户并指定其属性:
CREATE USER username WITH PASSWORD         'PASSWORD' CREATEDB CREATEUSER IN GROUP 'group';
如果要修改用户权限则:
ALTER USER username WITH ...

------补充说明