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 权限,这样就允许接受权限的人将该权限转授他人。
如果授权选项后来别撤销,那么所有那些从这个接受者接受了权限的用户(直接或间接)都将失去该权限。