Toggle navigation
主页
English
K8S
Golang
Guitar
About Me
归档
标签
Welcome to Sanger's Blog!
Postgresql 数据库权限说明
无
2021-03-26 18:00:58
31
0
0
sanger
[TOC] ## 1. PG权限位说明 使用psql的\dp 命令获取表和字段的现存权限的有关的信息。例如: ``` => \dp mytable Access privileges Schema | Name | Type | Access privileges | Column access privileges --------+---------+-------+-----------------------+-------------------------- public | mytable | table | miriam=arwdDxt/miriam | col1: : =r/miriam : miriam_rw=rw/miriam : admin=arw/miriam (1 row) ``` \dp显示的条目解释如下: ``` rolename=xxxx -- 赋予一个角色的权限 =xxxx -- 赋予 PUBLIC 的权限 r -- SELECT ("读") w -- UPDATE ("写") a -- INSERT ("追加") d -- DELETE D -- TRUNCATE x -- REFERENCES t -- TRIGGER X -- EXECUTE U -- USAGE C -- CREATE c -- CONNECT T -- TEMPORARY arwdDxt -- ALL PRIVILEGES (用于表,用于其他对象时不同) * -- 给前面权限的授权选项 /yyyy -- 授出这个权限的角色 ``` ## 2. PG权限详解 - SELECT 允许从指定表、视图或序列的任何列或者列出的特定列进行SELECT。还允许使用COPY TO。在UPDATE或DELETE中引用已有列值时也需要这个特权。对于序列,这个特权也允许使用currval函数。对于大对象,这个特权允许读取对象。 - INSERT 允许INSERT一个新行到指定表中。如果列出了特定的列,只有这些列能在INSERT命令中被赋值(其他列将因此收到默认值)。还允许COPY FROM。 - UPDATE 允许对指定表、视图或序列的任何列或者列出的特定列进行UPDATE(实际上,任何非平凡的UPDATE命令也会要求SELECT特权,因为它必须引用表列来判断哪些行要被更新或者为列计算新值)。除SELECT特权之外,SELECT ... FOR UPDATE以及SELECT ... FOR SHARE也要求至少一列上的这个特权。对于序列,这个特权允许使用nextval和setval函数。对于大对象,这个特权允许写入或者截断对象。 - DELETE 允许从指定的表中DELETE一行(实际上,任何非平凡的DELETE命令也将要求SELECT特权,因为它必须引用表列来判断要删除哪些行)。 - TRUNCATE 允许在指定的表上TRUNCATE。 - REFERENCES 允许创建引用指定表或指定表列的外键约束。(请参阅CREATE TABLE语句。) - TRIGGER 允许在指定的表上创建触发器(见CREATE TRIGGER语句)。 - CREATE 对于数据库,允许在其中创建新模式或发布。 对于模式,允许在其中创建新的对象。要重命名一个已有对象,你必须拥有该对象并且具有所在模式的这个特权。 对于表空间,允许在其中创建表、索引和临时文件,并且允许创建使用该表空间作为默认表空间的数据库(注意撤回这个特权将不会更改现有对象的放置位置)。 - CONNECT 允许用户连接到指定数据库。在连接开始时会检查这个特权(除了检查由pg_hba.conf施加的任何限制之外)。 - TEMPORARY TEMP 允许在使用指定数据库时创建临时表。 - EXECUTE 允许使用指定的函数以及使用在该函数之上实现的任何操作符。这是适用于函数的唯一一种特权类型(这种语法也可用于聚集函数)。 - USAGE 对于过程语言,允许使用指定的语言创建函数。这是适用于过程语言的唯一一种特权类型。 对于模式,允许访问包含在指定模式中的对象(假定这些对象的拥有特权要求也满足)。本质上这允许被授权者在模式中“查阅”对象。如果没有这个权限,还是有可能看到对象名称,例如通过查询系统表。还有,在撤回这个权限之后,现有后端可能有语句之前已经执行过这种查阅,因此这不是一种阻止对象访问的完全安全的方法。 对于序列,这种特权允许使用currval和nextval函数。 对于类型和域,这种特权允许用该类型或域来创建表、函数和其他模式对象(注意这不能控制类型的一般“用法”,例如出现在查询中的该类型的值。它只阻止基于该类型创建对象。该特权的主要目的是控制哪些用户在一个类型上创建了依赖,这能够阻止拥有者以后更改该类型)。 对于外部数据包装器,这个特权允许使用该外部数据包装器创建新服务器。 对于服务器,这个特权允许使用该服务器创建外部表, 被授权者还可以创建、修改或删除与该服务器相关的他们自己的用户映射。 - ALL PRIVILEGES 一次授予所有的可用特权。在PostgreSQL中,PRIVILEGES关键词是可选的,但是在严格的 SQL 中是要求它的。 其他命令所要求的特权会被列在相应命令的参考页中。 ## 3. 需要注意的其他问题 ### 3.1 关于库和表的删除权限 删除库需要是这个库的owner,删除表需要是表的创建者。 ### 3.2 已赋权给库下所有表的权限给账号B,但在A账号新建表后,B账号无此表权限。 语句只是对当时状态下的所有表进行赋权,如果后续不是用的B账号新建的表,还是会出现权限不足问题(需要重新赋权一次)。 ## 4. 参考 http://www.postgres.cn/docs/10/sql-grant.html
上一篇:
阿里云 RDS Mysql 数据库权限说明
下一篇:
CoreOS概述
0
赞
31 人读过
新浪微博
微信
更多分享
腾讯微博
QQ空间
人人网
文档导航