----源文http://www.php100.com/manual/PostgreSQL8/sql-grant.html

GRANT

Name

GRANT -- 定义访问权限

Synopsis

GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }[,...] | ALL [ PRIVILEGES ] }ON [ TABLE ] tablename [, ...]TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }ON DATABASE dbname [, ...]TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]GRANT { EXECUTE | ALL [ PRIVILEGES ] }ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...]TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]GRANT { USAGE | ALL [ PRIVILEGES ] }ON LANGUAGE langname [, ...]TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }ON SCHEMA schemaname [, ...]TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]GRANT { CREATE | ALL [ PRIVILEGES ] }ON TABLESPACE tablespacename [, ...]TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]

描述

GRANT 命令将某对象(表,视图,序列,函数,过程语言,模式或者表空间) 上的特定权限给予一个用户或者多个用户或者一组用户。 这些权限将增加到那些已经赋予的权限上,如果存在这些权限的话。

键字 PUBLIC 表示该权限要赋予所有用户, 包括那些以后可能创建的用户。PUBLIC 可以看做是一个隐含定义好的组,它总是包括所有用户。 任何特定的用户都将拥有直接赋予他/她的权限,加上他/她所处的任何组, 以及再加上赋予 PUBLIC 的权限的总和。

如果声明了 WITH GRANT OPTION,那么权限的受予者也可以赋予别人。 没有这个选项,接受权限的用户不能给别人授权不允许的。 目前,赋权选项只能给独立的用户,而不能给组或者 PUBLIC

对对象的所有者(通常就是创建者)而言,没有什么权限需要赋予, 因为所有者缺省就持有所有权限。(不过,所有者出于安全考虑可以选择废弃一些他自己的权限。) 删除一个对象的权力,或者是任意修改它的权力都不是可赋予的权利所能描述的; 它是创建者固有的,并且不能赋予或撤销。所有者也隐含地拥有该对象的所有授权选项。

根据对象的不同,初始的缺省权限可能包括给 PUBLIC 赋予一些权限。缺省设置对于表,模式和表空间是没有公开访问权限的; TEMP 表为数据库创建权限;EXECUTE 权限用于函数; 以及 USAGE 用于语言。对象所有者当然可以撤回这些权限。 (出于最大安全性考虑,在创建该对象的同一个事务中发出 REVOKE; 那么就不会打开给别的用户使用该对象的窗口。)

可能的权限有:

  • SELECT

  • 允许对声明的表,试图,或者序列 SELECT 任意字段。还允许做 COPY TO 的源。 对于序列而言,这个权限还允许使用 currval 函数。

  • INSERT

  • 允许向声明的表 INSERT 一个新行。 同时还允许做 COPY FROM。

  • UPDATE

  • 允许对声明的表中任意字段做  UPDATE。 SELECT ... FOR UPDATESELECT ... FOR SHARE 也要求这个权限(除了 SELECT 权限之外)。比如, 这个权限允许使用nextval, 和 setval

  • DELETE

  • 允许从声明的表中 DELETE 行。

  • RULE

  • 允许在该表/视图上创建规则。(参阅 CREATE RULE 语句。)

  • REFERENCES

  • 要创建一个外键约束,你必须在参考表和被参考表上都拥有这个权限。

  • TRIGGER

  • 允许在声明表上创建触发器。(参阅 CREATE TRIGGER 语句。)

  • CREATE

  • 对于数据库,允许在该数据库里创建新的模式。

    对于模式,允许在该模式中创建新的对象。 要重命名一个现有对象,你必需拥有该对象并且。 对包含该对象的模式拥有这个权限。

    对于表空间,允许表在该表空间中创建,以及允许创建数据库和模式的时候把该表空间指定为其缺省表空间。       (请注意,撤销这个权限不会改变现有数据库和模式的存放位置。)

  • TEMPORARY
    TEMP

  • 允许在使用该数据库的时候创建临时表。

  • EXECUTE

  • 允许使用指定的函数并且可以使用任何利用这些函数实现的操作符。 这是适用于函数的唯一的一种权限类型。 (该语法同样适用于聚集函数。)

  • USAGE

  • 对于过程语言, 允许使用指定过程语言创建该语言的函数。 这是适用于过程语言的唯一的一种权限类型。

    对于模式,允许访问包含在指定模式中的对象(假设该对象的所有权要求同样也设置了)。 最终这些就允许了权限接受者"查询"模式中的对象。

  • ALL PRIVILEGES

  • 一次性给予所有可以赋予的权限。 PRIVILEGES 关键字在 PostgreSQL 里是可选的, 但是严格的 SQL 要求有这个关键字。

其它命令要求的权限都在相应的命令的参考页上列出。

注意

REVOKE 命令用于删除访问权限。

如果非对象所有者企图在对象上 GRANT 权限,而该用户没有该对象上指定的权限,那么命令将立即失败。    只要有某些可用的权限,该命令就会继续,但是它只授予那些该用户有授权选项的权限。    如果手头没有可用的授权选项,那么 GRANT ALL PRIVILEGES 形式将发出一个警告信息,    其它命令形式将发出在命令中提到的,但是没有授权选项的那些权限相关的警告信息。    (这些语句原则上也适用于对象所有者,但是因为所有者总是被认为拥有所有授权选项,所以这种情况永远不会发生在所有者身上。)

我们要注意数据库超级用户可以访问所有对象, 而不会受对象的权限设置影响。这个特点类似 Unix 系统的 root 的权限。和 root 一样,除了必要的情况,总是以超级用户身分进行操作是不明智的做法。

目前,PostgreSQL 不支持给一个表的独立字段进行权限赋予和撤销的操作, 一个绕开的办法是创建一个拥有那几行的视图然后给那个视图赋予权限。

使用 psql 的 \z 命令获取在现有对象上的与权限有关的信息。

lusitania=> \z mytableAccess privileges for database "lusitania"Schema |  Name   | Type  |                     Access privileges
--------+---------+-------+------------------------------------------------------------public | mytable | table | {miriam=arwdRxt/miriam,=r/miriam,"group todos=arw/miriam"}
(1 row)

\z 显示的条目解释如下:

              =xxxx -- 赋予 PUBLIC 的权限uname=xxxx -- 赋予一个用户的权限group gname=xxxx -- 赋予一个组的权限r -- SELECT ("读")w -- UPDATE ("写")a -- INSERT ("追加")d -- DELETER -- RULEx -- REFERENCESt -- TRIGGERX -- EXECUTEU -- USAGEC -- CREATET -- TEMPORARYarwdRxt -- ALL PRIVILEGES (用于表)* -- 给前面权限的授权选项/yyyy -- 授出这个权限的用户

用户 miriam 在建完表之后再做下面的语句, 就可以得到上面例子的结果

GRANT SELECT ON mytable TO PUBLIC;
GRANT SELECT, UPDATE, INSERT ON mytable TO GROUP todos;

如果一个给定的对象的 "Access privileges" 字段是空的, 这意味着该对象有缺省权限(也就是说,它的权限字段是 NULL)。 缺省权限总是包括所有者的所有权限,以及根据对象的不同,可能包含一些给 PUBLIC 的权限。 对象上第一个 GRANT 或者 REVOKE 将实例化这个缺省权限(比如,产生 {=,miriam=arwdRxt}) 然后根据每次特定的需求修改它。

请注意所有者的隐含授权选项没有在显示出来的访问权限里标记出来。    只有在授权选项明确地授予某人之后,才会显示一个 *

例子

把表 films 的插入权限赋予所有用户:

GRANT INSERT ON films TO PUBLIC;

赋予用户manuel对视图kinds的所有权限:

GRANT ALL PRIVILEGES ON kinds TO manuel;

请注意,如果上面的命令由超级用户或者 kinds 的所有者执行,那么它实际上会赋予所有权限,   如果由其他人执行,那么它会赋予这个“其他人”拥有授权选项的所有权限。

兼容性

根据 SQL 标准,在 ALL PRIVILEGES 里的 PRIVILEGES 关键字是必须的。SQL 不支持在一条命令里对多个表设置权限。

PostgreSQL 允许一个对象所有者撤销它自己的普通权限:    比如,一个表所有者可以让自己对这个表是只读的,方法是撤销自己的 INSERT,UPDATE,    以及 DELETE 权限。根据 SQL 标准,这是不可能的。原因是 PostgreSQL    把所有者的权限当作由所有者给自己赋予的;因此也可以撤销他们。    在 SQL 标准里,所有者的权限是假设为 "_SYSTEM" 实体赋予的。因为所有者不是 "_SYSTEM",    所以他不能撤销这些权限。

SQL 标准允许在一个表里为独立的字段设置权限:

GRANT privilegeON table [ ( column [, ...] ) ] [, ...]TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]

SQL 标准对其它类型的对象提供了一个 USAGE 权限:字符集,校勘,转换,域。

RULE 权限,以及在数据库,表空间,模式,语言和序列上的权限是 PostgreSQL 扩展。

转载于:https://blog.51cto.com/riverxyz/1880795

postgresql grant权限解释相关推荐

  1. mysql的grant权限

    http://7567567.blog.51cto.com/706378/710159 grant 权限 on 数据库对象 to 用户 (2011-09-06 16:38:43) 转载 通过命令&qu ...

  2. mysql之grant权限说明

    mysql中给一个用户授权如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,格式为: 给没有用户授权 grant 权限 on 数据库对象 to ...

  3. linux里的drwxr-xr-x代表的权限解释,以及linux中文件和目录的类型,查看用户用户组

    文件权限解释 权限的计算是除去第一位字母开始,权限都是三个符号为一组合,其中-表示没有这个权限 d:第一位表示文件类型.d是目录文件,l是链接文件,-是普通文件,p是管道 rwx:第2-4位表示这个文 ...

  4. PostgreSQL 批量权限 管理方法

    关于PostgreSQL的逻辑架构和权限体系,可以参考 https://yq.aliyun.com/articles/41210 本文将给大家介绍一下如何批量管理表,视图,物化视图的权限. 以及如何管 ...

  5. 数据库内核月报 - 2015 / 11-PgSQL · 答疑解惑 · PostgreSQL 用户组权限管理

    背景 RDS上的PG没有开放超级用户,这给很多云上的客户使用PG带来了困难.因此有必要给大家讲讲PG的用户权限管理的一些小知识,它可以很好的帮助用户顺利的从之前的 DB 管理方式过度到云上. PG 的 ...

  6. mysql : grant权限命令汇总

    用户权限管理主要有以下作用:  1. 可以限制用户访问哪些库.哪些表  2. 可以限制用户对哪些表执行SELECT.CREATE.DELETE.DELETE.ALTER等操作  3. 可以限制用户登录 ...

  7. linux 777,755 等权限解释

    常用的linux文件权限: 444 r–r--r– 600 rw------- 644 rw-r–r-- 666 rw-rw-rw- 700 rwx------ 744 rwxr–r-- 755 rw ...

  8. oracle grant 权限

    grant connect,resource,dba to user; CONNECT角色: --是授予最终用户的典型权利,最基本的 CREATE SESSION --建立会话 RESOURCE角色: ...

  9. 给mysql的root %用户添加grant权限。并给创建的用户赋予权限

    登录mysql [root@dbserver bin]# ./mysql -u root -p 选数据库 mysql> use mysql 查看权限 mysql> mysql> us ...

最新文章

  1. LeetCode简单题之整数的各位积和之差
  2. MySQL太细碎了,我硬生生捋出了一条核心大主线!
  3. PHP 和 AJAX MySQL
  4. 来自看雪的手把手调试DebugPort清零
  5. Jupyterlab 安装配置手册
  6. SLAM Cartographer(18)后端优化问题求解器
  7. NSDate的简单用法
  8. Visual Stdio平台工具集以及配置
  9. python线程暂停_python3线程启动与停止
  10. 深观察|区块链不是洪水猛兽,但要警惕以区块链之名圈钱
  11. 深入理解SYN***.+防范思想及ROS设置
  12. 去掉Scala的糖衣(4) -- Type Aliase
  13. App制作开发工具源代码搭建网站转app网站
  14. 计算机网络放大器的作用,运算放大器
  15. php excel导出科学计数法,php导出excel时科学计数法的处理方法
  16. U盘快捷方程病毒 iexplore.vbs
  17. 大学生集体恶搞学士服猥琐拍照,谁羞辱了谁?!(图)
  18. torch.nn、(二)
  19. 基于单片机的信号发生器设计
  20. catkin_make编译时fatal error: ###_msgs/***.h: 没有那个文件或目录

热门文章

  1. 朝会資料  幕末の歴史の簡単紹介 2010年8月30日
  2. 力扣题目——653. 两数之和 IV - 输入 BST
  3. 如何解决“本地编辑,更新时传入删除”消息
  4. 如何查看Git提交中的更改?
  5. 发行版,distutils,setuptools和distutils2之间的区别?
  6. JavaScript截断/切片/修剪掉字符串中的最后一个字符
  7. win11怎么取消pin码实现自动登陆 windows11取消pin码自动登陆的方法步骤
  8. 七彩虹智能主板设置U盘启动教程
  9. ros中web端通过 ajax 访问 nginx 加载静态 pgm 地图显示在canvas画布中
  10. javascript页面刷新与定时跳转页面