服务器 频道

PostgreSQL手册之用户管理

IT168 服务器学院
    用户属性
    一个数据库用户可以有一系列属性,这些属性定义他的权限,以及与客户认证系统的交互。

    超级用户
 
    数据库超级用户超越所有权限检查。同样,只有超级用户才能创建新的用户。 要创建数据库超级用户,用 CREATE USER name CREATEUSER。

    创建数据库
    用户要想创建数据库,必须明确给出权限(对于超级用户是例外,因为他们超越所有权限检查)。 要创建这样的用户,用 CREATE USER name CREATEDB。

    口令
    只有在对客户认证方法要求客户在与数据库建立连接是使用口令的时候,口令才比较重要。 password,md5,和 crypt 认证方法使用口令。 数据库口令与操作系统口令是无关的。在创建用户的时候声明一个口令是这样: CREATE USER name PASSWORD ''string''。

    一个用户的属性可以在创建后用 ALTER USER 修改。 参考 CREATE USER 和 ALTER USER 的手册获取细节。

    一个用户也可以为许多运行时配置设置个人缺省, 那些配置在 Section 16.4 里描述。 比如,如果出于某种原因你想在所有你做的连接中关闭索引扫描(提示:不是个好主意), 你可以用

    ALTER USER myname SET enable_indexscan TO off;

    这样就会保存该设置(但是不是立即设置)。 这么做后,在随后的连接中就好像在会话开始之后都马上 SET enable_indexscan TO off;了一样。 你也可以在会话中修改这个设置;它只是缺省。要撤销任何这样的设置, 使用 ALTER USER username RESET varname;。

    和 Unix 里一样,组是一个逻辑上对用户分组,进而简化权限管理的方法: 权限可以赋予整个组,也可以对整个组撤除。要创建一个组,使用 SQL 命令 CREATE GROUP:

    CREATE GROUP name;

    要向组中增加用户或删除用户,用 SQL 命令 ALTER GROUP:

ALTER GROUP name ADD USER uname1, ... ;
ALTER GROUP name DROP USER uname1, ... ;
  
    要删除一个阻,使用 DROP GROUP:

DROP GROUP name;

    这样只会删除组,不删除成员用户。

    要判断现存组的集合,检查系统表 pg_group,比如

SELECT groname FROM pg_group;

    psql 程序的 \dg 元命令也用于列出现有组。

    权限

    当创建一个数据库对象时,它属于一个用户。该用户就是执行创建命令的那位。 要改变一个表,索引,序列,或者视图的所有者,使用 ALTER TABLE 命令。 缺省时,只有所有者(或者超级用户)可以对该对象做任何事情。为了让别的用户也能用它,必须赋予那些用户权限。

    我们有以下几种权限:SELECT(读), INSERT(追加), UPDATE(写),DELETE, RULE(规则),REFERENCES(外键), TRIGGER, CREATE,TEMPORARY,EXECUTE, USAGE,和 ALL PRIVILEGES。 有关PostgreSQL所支持的权限的更多信息, 请参阅 Part VI 里面的 GRANT 页获取更多详细的信息。 修改或者删除一个对象的权限总是只有该对象的所有者才有。 要赋予权限,必需使用 GRANT 命令。 要赋权限,用GRANT命令。因此,如果 joe 是一个现存用户,而 accounts是一个现存表,那么可以这样赋予更新权限

GRANT UPDATE ON accounts TO joe;
 
    执行这条命令的用户必须是表的所有者。要给一个组赋权限,用

GRANT SELECT ON accounts TO GROUP staff;

    特殊的"用户"名 PUBLIC可以用于给系统中的每一个用户赋权限。 写 ALL 在权限声明位置上表明赋予所有权限。

    要废除一个权限,用 REVOKE 命令:

REVOKE ALL ON accounts FROM PUBLIC;

    表所有者的特殊权限(也就是说,做 DROP,GRANT, REVOKE 等等的权限)总是隐含给所有者的,并且不能赋予或者删除。 但是表所有者可以废除他的普通权限,比如给自己做一个只读的表,就象给别人做一样。

0
相关文章