Postgresql数据库支持灵活的权限管理,可以控制一个角色(组或用户)读、写、更新、删除一个表、执行一个函数、操作(使用、更新等)的权限。)视图和序列。
PG的权限管理功能很强大,可以细化到一个表的每个字段,比如禁止用户访问一个表中的密码字段,后面会详细说明。
虽然用户和角色在PG数据库中被称为角色,甚至创建语句是create role XXX,但是用户和角色之间还是有一些区别的。在这里,我们把有登录权限的人称为用户,把没有登录权限的人称为角色,这样来区分。
实际上,在PgAdmin管理工具中,我们可以看到用户和角色的区别。没有登录权限的放在组角色下,有登录权限的放在登录角色下。
基本权限
用户和角色可以被赋予基本权限,如创建数据库权限、超级用户权限、创建角色权限等。
例如,创建用户的语句是:
一个
2创建角色来宾登录无超级用户继承无创建数据库无创建角色无应用;
请注意,上面的角色来宾具有登录权限,因此它被称为用户。
创建角色的陈述是:
一个
2创建角色“组”无超级用户继承无创建数据库无创建角色无应用;
请注意,这里没有LOGIN权限,因此它是一个角色。
在上述角色和用户的创建语句中,没有授予超级用户和数据库创建权限。
操作数据库对象的权限
只有没有登录权限的角色才能被授予数据库对象的操作权限,有登录权限的用户不能被直接授予。
那么这就带来了一个问题,如何控制登录用户操作数据库对象的权限?
答案是让用户成为角色的成员,此时用户可以拥有角色的权限,这进一步限制了登录用户操作数据库对象的权限。
如果将上述角色组给了来宾用户:
1向客人授予“团体”;
之后,来宾用户拥有组角色拥有的数据库对象权限。
例如,控制组角色只能对类表执行插入操作:
1将表类上的插入授权给“组”;
此时,用来宾用户登录数据后,只能对表类执行插入操作,不能执行删除、更新等操作。
示例代码如下。以来宾用户身份登录,并访问TEST数据库下的类表。
一个
2
三
四
五
六
七
八
九
10
11
12
13服务器[localhost]:数据库[postgres] :端口[5433]:用户名[postgres]:来宾用户的密码:psql (9.4.5)输入“help”可获得帮助信息。postgres=\ C TEST您现在已连接到数据库“TEST”和用户“guest”。TEST=从类中选择*;错误:关系类测试=插入类值(2,“类1”)的权限被拒绝;插入0 1