# 5.7.特权
创建对象时,会为其指定所有者。所有者通常是执行创建语句的角色。对于大多数类型的对象,初始状态是只有所有者(或超级用户)可以对对象执行任何操作。要允许其他角色使用它,特权必须承认。
有不同种类的特权:选择
,插入
,使现代化
,删去
,截断
,推荐人
,触发
,创造
,连接
,短暂的
,处决
和用法
适用于特定对象的权限因对象的类型(表、函数等)而异。关于这些特权含义的更多细节见下文。以下章节还将向您展示如何使用这些特权。
修改或销毁物品的权利是物品所有者的固有权利,其本身不能被授予或撤销。(但是,与所有特权一样,该权利也可以由所属角色的成员继承;请参阅。)第22.3节.)
可以使用改变
例如,为对象指定适当类型的命令
ALTER TABLE table_name OWNER TO new_owner;
超级用户总能做到这一点;普通角色只有同时是对象的当前所有者(或所有者角色的成员)和新所有者角色的成员时才能执行此操作。
要分配特权,请授予命令被使用。例如,如果乔
是现有角色,以及账户
如果是现有表,则可以通过以下方式授予更新该表的权限:
GRANT UPDATE ON accounts TO joe;
写全部的
代替特定权限,授予与对象类型相关的所有权限。
特殊的“角色”名称平民的
可用于向系统上的每个角色授予权限。此外,还可以设置“组”角色,以便在数据库有许多用户时帮助管理权限——有关详细信息,请参阅第22章.
要撤销以前授予的特权,请使用合适的名称撤销命令:
REVOKE ALL ON accounts FROM PUBLIC;
通常,只有对象的所有者(或超级用户)可以授予或撤销对象的权限。然而,有可能授予“授予选择权”的特权,这使接受者有权反过来将其授予他人。如果授予选项随后被撤销,则所有从该接收者(直接或通过一系列授予)获得特权的人都将失去该特权。有关详细信息,请参阅授予和撤销参考页。
对象的所有者可以选择撤销自己的普通特权,例如,使表为自己和他人只读。但所有者总是被视为持有所有授予选择权,因此他们总是可以重新授予自己的特权。
可用特权包括:
选择
允许选择
来自表、视图、物化视图或其他类似表的对象的任何列或特定列。还允许使用抄送
。引用中的现有列值时也需要此权限使现代化
或删去
.对于序列,此权限还允许使用库瓦尔
作用对于大型对象,此权限允许读取对象。
插入
允许插入
可以在特定列上授予将新行添加到表、视图等中的权限,在这种情况下,只能在插入
命令(因此其他列将接收默认值)。还允许使用抄袭
.
使现代化
允许使现代化
表、视图等的任何列或特定列(实际上,任何非平凡的使现代化
命令将需要选择
权限,因为它必须引用表列来确定要更新哪些行和/或计算列的新值。)选择更新
和选择分享
除了选择
特权对于序列,此权限允许使用nextval
和塞特瓦尔
功能。对于大型对象,此权限允许写入或截断对象。
删去
允许删去
表、视图等中的一行(实际上,任何非平凡的删去
命令将需要选择
权限,因为它必须引用表列来确定要删除哪些行。)
截断
允许截断
在桌子上。
推荐人
允许创建引用表或表的特定列的外键约束。
触发
允许在表、视图等上创建触发器。
创造
对于数据库,允许在数据库中创建新的架构和发布,并允许在数据库中安装受信任的扩展。
对于模式,允许在模式中创建新对象。要重命名现有对象,必须拥有该对象和对包含的架构具有此权限。
对于表空间,允许在表空间中创建表、索引和临时文件,并允许创建将表空间作为默认表空间的数据库。
请注意,取消此权限不会改变现有对象的存在或位置。
连接
允许被授权人连接到数据库。在连接启动时检查此权限(除了检查pg_hba。形态
).
短暂的
允许在使用数据库时创建临时表。
处决
允许调用函数或过程,包括使用在函数顶部实现的任何运算符。这是唯一适用于函数和过程的特权类型。
用法
对于过程语言,允许使用该语言创建该语言中的函数。这是唯一适用于过程语言的特权类型。
对于模式,允许访问模式中包含的对象(假设对象自身的权限要求也得到满足)。本质上,这允许被授权人在模式中“查找”对象。如果没有此权限,仍然可以查看对象名称,例如通过查询系统目录。此外,在撤销此权限后,现有会话可能有以前执行过此查找的语句,因此这不是防止对象访问的完全安全的方法。
对于序列,允许使用库瓦尔
和nextval
功能。
对于类型和域,允许在创建表、函数和其他架构对象时使用类型或域。(请注意,此权限并不控制该类型的所有“使用”,例如查询中出现的该类型的值。它仅阻止创建依赖于该类型的对象。此权限的主要目的是控制哪些用户可以创建对该类型的依赖项,这可能会阻止所有者以后更改该类型。)
对于外部数据包装,允许使用外部数据包装创建新服务器。
对于外部服务器,允许使用服务器创建外部表。被授权人还可以创建、更改或删除自己与该服务器关联的用户映射。
其他命令所需的权限列在相应命令的参考页上。
PostgreSQL将某些类型的对象的权限授予平民的
默认情况下,在创建对象时。不授予任何特权平民的
默认情况下,在表、表列、序列、外部数据包装器、外部服务器、大型对象、模式或表空间上。对于其他类型的对象,为平民的
详情如下:连接
和短暂的
(创建临时表)数据库的权限;处决
职能和程序特权;和用法
语言和数据类型(包括域)的权限。当然,对象所有者可以,撤销
默认权限和明确授予的权限。(为获得最大安全性,请发布撤销
在创建对象的同一事务中;这样就没有其他用户可以使用该对象的窗口。)此外,可以使用更改默认权限命令
表5.1显示中用于这些特权类型的单字母缩写国际计算语言学协会(访问控制列表)值。您将在psql下面列出的命令,或查看系统目录的ACL列时。
表5.1.ACL特权缩写
特权 | 缩写 | 适用的对象类型 |
---|---|---|
选择 | r (“读”) | 大型物体 , 序列 , 桌子 (和类似表格的对象)、表格列 |
插入 | A. (“附加”) | 桌子 ,表列 |
使现代化 | w (“写”) | 大型物体 , 序列 , 桌子 ,表列 |
删去 | d | 桌子 |
截断 | D | 桌子 |
推荐人 | 十、 | 桌子 ,表列 |
触发 | t | 桌子 |
创造 | C | 数据库 , 模式 , 表空间 |
连接 | c | 数据库 |
短暂的 | T | 数据库 |
处决 | 十、 | 作用 , 程序 |
用法 | U | 领域 , 国外数据包装器 , 外部服务器 , 语言 , 模式 , 序列 , 类型 |
表5.2使用上面显示的缩写总结每种类型的SQL对象的可用权限。它还显示了psql命令,可用于检查每种对象类型的权限设置。
表5.2.访问权限摘要
对象类型 | 所有特权 | 违约平民的 特权 | psql命令 |
---|---|---|---|
数据库 | 反恐委员会 | Tc | \l |
领域 | U | U | \dD+ |
作用 或程序 | 十、 | 十、 | \df+ |
国外数据包装器 | U | 没有一个 | \露水+ |
外部服务器 | U | 没有一个 | \德斯+ |
语言 | U | U | \dL+ |
大型物体 | rw | 没有一个 | |
模式 | 加州大学 | 没有一个 | \dn+ |
序列 | rwU | 没有一个 | \dp |
桌子 (和桌状物体) | arwdDxt | 没有一个 | \dp |
表列 | arwx | 没有一个 | \dp |
表空间 | C | 没有一个 | \分贝+ |
类型 | U | U | \dT+ |
为特定对象授予的权限显示为aclitem
条目,每个aclitem
描述特定授予人授予的一个受让人的权限。例如卡尔文=r*w/霍布斯
指定角色加尔文
有特权选择
(r
)授予期权(*
)以及不可授予的特权使现代化
(w
),均由角色授予霍布斯
如果加尔文
也有其他授予人授予的对同一对象的某些特权,这些特权将作为单独的aclitem
进入一片空旷的土地aclitem
代表平民的
.
例如,假设用户米里亚姆
创建表格空白表
而且:
GRANT SELECT ON mytable TO PUBLIC;
GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw;
然后是psql\dp
命令将显示:
=> \dp mytable
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies