【postgresql】用户和权限管理

2020-12-29  本文已影响0人  宅家学算法

1.组角色和登陆角色:role and user

  组角色可以看作数据用户,可以拥有数据库对象(表)并把这些对象上的权限赋予其他角色,以控制拥有访问对象的权限。简单理解,组用户相当于类别,这个类别是对访问的数据库表的权限进行定义,并且该类别能够被登陆角色用户继承,但是这个类别在初始情况下不具备登陆的权限,一旦赋予登陆权限即可当作登陆角色使用。

任何角色都可以是成员角色,但只有组角色能拥有成员角色。成员角色会自动继承父角色(它所属的组角色)的数据库权限。

  一个登陆角色最终的权限等于其各个组角色所得权限的总合。数据库的权限需要逐层授予,如某一个登陆角色想要查看某张表,那么他所属的组角色需要同时获得这张表所在的数据库的connect权限,所在架构的usage权限和这张表的select权限。

数据库对象是不能直接把权限授予普通登陆角色的,只能将权限授予登陆角色所在的组角色或者是带有超级用户属性的登陆角色(准确说超级用户的行为是不被检查的)。

  因此,如果登陆角色没有组角色,因尽可能给他创建一个组角色,让登陆角色成为组角色的成员角色。一般在postgresql实际应用过程中,直接创建登陆角色时,数据库会默认为该登陆角色创建组角色。

2.数据库权限

角色属性/特殊权限:login、createdb、createrole
内置权限:select、insert、update、delete、rule、references、trigger、create、temporary、execute、usage

3.操作尝试

  创建组角色、登陆角色

创建组角色:create role role_name;
创建登陆角色:create user password '***'    
           create role role_name login;

  创建指定数据库用户并赋予权限

1.创建一个用户名为zz密码为123的用户
CREATE USER zz WITH ENCRYPTED PASSWORD '123';
2.用户只读事务
alter user zz set default_transaction_read_only=on;
3.指定数据库sjk
grant all on database sjk to zz;
4.把所有库的语言的USAGE权限给到zz
GRANT USAGE ON SCHEMA public to zz; 
5.授予select权限(这句要进入具体数据库操作在哪个db环境执行就授予那个db的权)
grant select on all tables in schema public to zz;
6.授予create权限
GRANT CREATE ON SCHEMA public to zz;
7.赋予表ta的所有权
GRANT ALL PRIVILEGES ON table ta TO zz;
上一篇下一篇

猜你喜欢

热点阅读