注意上述Role guest拥有LOGIN的权限,所以叫它用户。
创建角色的语句为:
注意这里没有LOGIN权限,所以是角色。
上述角色和用户的创建语句中,都没有赋予超级用户、创建数据库等权限。
操作数据库对象权限只能把数据库对象的操作权限赋予没有登录权限的角色,而不能直接赋予拥有登录权限的用户。
那么这样就带来一个问题,怎么样控制登录用户操作数据库对象的权限呢?
答案是让用户成为角色的成员,此时用户即可拥有角色的权限,进一步限制了登录用户操作数据库对象的权限。
如把上述角色group赋予guest用户:
之后,guest用户就拥有了group角色所拥有的数据库对象权限。
比如控制group角色只能对class表执行Insert操作:
此时使用guest用户登录数据后,就只能对表class执行insert操作,无法执行delete、update等操作。
示例代码如下,使用guest用户登录,访问TEST数据库下的class表。
从上述结果中可以看到,guest用户没有权限查询class表,但是可以插入数据库。原因就是只对group角色赋予了class表的insert权限,然后guest用户也就只有class表的insert权限。
前面说到PG的权限管理可以细化到表的某个字段,现在继续用class表和guest用户做实验。
从上述结果中可以看到,guest用户依然没有查询class表的权限,但是却有了查询class表里的num字段的权限。
在PG数据库中不单单可以控制操作表的权限,其他数据库对象,比如序列、函数、视图等都可以控制。
所以PG的权限控制功能非常强大。
补充:Postgres用户对数据库的权限
用户对数据库的权限(登录、超级用户权限)
(1)查看当前数据库中有用户highgo和用户a
(2)查看确认当前连接的用户为超级用户highgo,且该用户后创建角色和数据库的权限等
(3)查看当前集群中的数据库
(4)使用普通用户a连接数据库正常
(6)在超级用户连接highgo后,设置不允许普通用户a连接数据库
(7)在超级用户连接highgo后,设置不允许普通用户a连接数据库后,赋予用户a超级用户权限后仍然无法连接数据库
(8)将登录数据库的权限赋予用户a后,用户a可登录数据库
以上为个人经验,希望能给大家一个参考,也希望大家多多支持七叶笔记。如有错误或未考虑完全的地方,望不吝赐教。