一旦一个对象被创建,它会被分配一个所有者。所有者通常是执行创建语句的角色。对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情。为了允许其他角色使用它,必须分配权限。
有多种不同的权限:SELECT
、INSERT
、UPDATE
、DELETE
、TRUNCATE
、REFERENCES
、TRIGGER
、CREATE
、CONNECT
、TEMPORARY
、EXECUTE
以及USAGE
。可以应用于一个特定对象的权限随着对象的类型(表、函数等)而不同。PostgreSQL所支持的不同类型的完整权限信息请参考GRANT。下面的章节将简单介绍如何使用这些权限。
修改或销毁一个对象的权力通常是只有所有者才有的权限。
一个对象可以通过该对象类型相应的ALTER
命令来重新分配所有者,例如ALTER TABLE。超级用户总是可以做到这点,普通角色只有同时是对象的当前所有者(或者是拥有角色的一个成员)以及新拥有角色的一个成员时才能做同样的事。
要分配权限,可以使用GRANT
命令。例如,如果joe
是一个已有角色,而accounts
是一个已有表,更新该表的权限可以按如下方式授权:
GRANT UPDATE ON accounts TO joe;
用ALL
取代特定权限会把与对象类型相关的所有权限全部授权。
一个特殊的名为PUBLIC
的“角色”可以用来向系统中的每一个角色授予一个权限。同时,在数据库中有很多用户时可以设置“组”角色来帮助管理权限。详见Chapter 21。
为了撤销一个权限,使用REVOKE
命令:
REVOKE ALL ON accounts FROM PUBLIC;
对象拥有者的特殊权限(即执行DROP
、GRANT
、REVOKE
等的权力)总是隐式地属于拥有者,并且不能被授予或撤销。但是对象拥有者可以选择撤销他们自己的普通权限,例如把一个表变得对他们自己和其他人只读。
一般情况下,只有对象拥有者(或者超级用户)可以授予或撤销一个对象上的权限。但是可以在授予权限时使用“with grant option”来允许接收人将权限转授给其他人。如果后来授予选项被撤销,则所有从接收人那里获得的权限(直接或者通过授权链获得)都将被撤销。更多详情请见GRANT和REVOKE参考页。