|
GRANTSynopsisGRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] } ON [ TABLE ] objectname [, ...] TO { username | GROUP groupname | PUBLIC } [, ...] 描述GRANT 命令将某对象(表,视图,序列) 上的特定权限给予一个用户或者多个用户或者一组用户. 这些权限将增加到那些已经赋予的权限上,如果存在这些权限的话. 键字 PUBLIC 表示该权限要赋予所有用户, 包括那些以后可能创建的用户. PUBLIC 可以看做是一个隐含定义好的组,它总是包括所有用户. 请注意,任何特定的用户都将拥有直接赋予他/她的权限,加上 他/她所处的任何组,以及再加上赋予 PUBLIC 的权限的总和. 在创建完对象之后,除了对象的创建者之外, 其它用户没有任何访问该对象的权限,除非创建者赋予某些权限. 对对象的创建者而言,没有什么权限需要赋予,因为创建者自动持有 所有权限.(不过,创建者出于安全考虑可以选择 废弃一些他自己的权限.请注意赋予和废止权限的能力是创建者与生具来 的,并且不会丢失.删除对象的权利也是创建者固有的,并且不能赋予或 撤销.) 可能的权限有∶
其它命令要求的权限都在相应的命令的参考页上列出. 注意我们要注意数据库 superusers 可以访问所有对象, 而不会受对象的权限设置影响.这个特点类似 Unix 系统的 root 的权限.和 root 一样,除了必要的情况,总是以超级用户 身分进行操作是不明智的做法. 目前,要在 PostgreSQL 里只对某几列 赋予权限,你必须创建一个拥有那几行的视图然后给那个视图赋予权限. 使用 psql 的 \z 命令 获取在现有对象上的与权限有关的信息. Database = lusitania +------------------+---------------------------------------------+ | Relation | Grant/Revoke Permissions | +------------------+---------------------------------------------+ | mytable | {"=rw","miriam=arwdRxt","group todos=rw"} | +------------------+---------------------------------------------+ Legend: uname=arwR -- privileges granted to a user group gname=arwR -- privileges granted to a group =arwR -- privileges granted to PUBLIC r -- SELECT ("read") w -- UPDATE ("write") a -- INSERT ("append") d -- DELETE R -- RULE x -- REFERENCES t -- TRIGGER arwdRxt -- ALL PRIVILEGES
用 REVOKE 命令删除访问权限. 例子把表 films 的插入权限赋予所有用户∶ GRANT INSERT ON films TO PUBLIC;
赋予用户 manuel 对视图 kinds 的所有权限∶ GRANT ALL PRIVILEGES ON kinds TO manuel;
兼容性SQL92在 ALL PRIVILEGES 里的 PRIVILEGES 关键字是必须的. SQL 不支持在一条命令里 对多个表设置权限. SQL92 的 GRANT 语法允许在一个表里 为独立的字段设置权限,并且允许设置一个权限用来 给其它人赋予同样的权限∶ GRANT privilege [, ...] ON object [ ( column [, ...] ) ] [, ...] TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]
SQL 允许对其它类型的对象赋予 USAGE 权限∶CHARACTER SET,COLLATION,TRANSLATION,DOMAIN. TRIGGER 权限是 SQL99 引入的.RULE 权限是 PostgreSQL 扩展. |