欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

postgresql笔记016—权限管理

程序员文章站 2024-03-21 10:39:04
...

权限管理

当创建一个数据库对象时,他就被赋予了所有者。这个所有者通常是执行创建语句的角色。

对大多数类型的对象,初始状态只有其所有者(或超级管理员)可以对它做任何事情。要允许其它角色使用它,必须要经过权限授予。

在数据库中有很多种不同的权限:

权限类别 中文解释
select 查询
insert 插入
update 修改
delete 删除
truncate 清空表中的数据
references 创建外键
trigger 触发器相关
create 创建表
connect 常用与connect by
temporary 临时表(temporary table)
execute EXECUTE – 执行一个预备语句
usage

修改或者删除一个对象的权限永远是所有者独有的权限。

一个对象可以用alter命令以适当的对象类型赋予新的所有者,例如alter table。超级用户总是可以这样做;
普通用户只有在他同时是当前对象的所有者和新所有者角色的成员时可以这样做。

使用grant命令赋予权限。
例如,如果stt是一个已经存在的用户,而accounts是一个已经存在的表,更新标的权限可以用下面的命令赋予:

grant update on accounts to stt;

在权限的位置写上 all 则赋予所有与该对象类型相关的权限。

名为public 的特殊用户可以用于将权限赋予系统中的所有用户。另外,还可以使用组,角色来帮助管理一群用户的权限。

使用 revoke 命令可以撤销权限:

revoke all on accounts from public;

对象所有者的特殊权限(也就是drop,grant,revoke等权限)总是隐含地数据所有者,并且不能赋予或者撤销。
但是对象所有者可以选择撤销自己的普通权限,比如把一个表做成对自己和别人都是只读的。

最初,只有对象所有者(或者超级用户)可以赋值或者撤销对象的权限。
但是, 我们可以赋予一个with grant option 权限,这样就允许接受权限的人将该权限转授他人。
如果授权选项后来别撤销,那么所有那些从这个接受者接受了权限的用户(直接或间接)都将失去该权限。

相关标签: postgresql笔记