专业只做数据库实训和认证的品牌机构

微信公众号新浪微博
免费咨询电话:400-0909-964
当前位置: 网站首页 > postgresql > 教程 > PostgreSQL基础教程之:各种权限

PostgreSQL基础教程之:各种权限

文章来源: 更新时间:2020/5/6 15:26:12

在线老师点击咨询:

最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!

我要咨询

1. PostgreSQL权限概要

每个数据库对象都有一个所有者,默认情况下,所有者拥有该对象的所有权限

在数据库中所有的权限都和角色挂钩

权限分为两部分:

系统权限或者数据库用户的属性

数据库对象上的操作权限(内置权限)

对超级用户不做权限检查,其它用户走ACL(Access ControL List)

对于数据库对象,开始只有所有者和超级用户可以做任何操作,其它走ACL

2. 实例权限

由pg_hba.conf来控制

示例:

# TYPE DATABASE USER ADDRESS METHOD

# IPv4 local connections:

host all all 127.0.0.1/32 trust

host all postgres 0.0.0.0/0 reject

host all all 0.0.0.0/0 md5

以下内容主要由指令grant\revoke完成用户角色权限授予与取消

在线帮助:\h grant

3. 表空间权限

语法:

GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]

示例:

表空间路径:/home/postgres/data/user_t

创建表空间:CREATE TABLESPACE tbls_t OWNER user_t LOCATION '/home/postgres/data/user_t';

表空间授权:grant create on tablespace tbls_t to u3;

查看权限:\db+

4. 数据库权限

包括允许连接数据库,允许在数据库中创建schema。

默认情况下,数据库在创建后

允许public角色连接,即允许任何人连接。

不允许除了超级用户和owner之外的任何人在数据库中创建schema。

会自动创建名为public 的schema,这个schema的all权限已经赋予给public角色,即允许任何人在里面创建对象。

语法:

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }

ON DATABASE database_name [, ...]

TO role_specification [, ...] [ WITH GRANT OPTION ]

备注:WITH GRANT OPTION表示被赋予权限的用户,拿到对应的权限后,还能将对应的权限赋予给其他人,否则只能自己有这个权限,但是不能再赋予给其他人

示例:

create database testdb tablespace tbls_t;

grant connect on database testdb to u1;

#连接验证

\c testdb u1

#创建对象验证

create table t1(id int);

#注意:这是创建表指定表空间后,还会存放在默认表空间中,这里是涉及到表空间的授权。

create table t1(id int) tablespace tbls_t;

#可以创建表对象,存放到默认表空间中(reltablespace字段值为0)

select relname ,reltablespace,relowner from pg_class where relname='t1';

5. schema权限

包括允许查看schema中的对象,允许在schema中创建对象;

默认情况下新建的schema的权限不会赋予给public角色;

因此除了超级用户和owner,任何人都没有权限查看schema中的对象或者在schema中新建对象。

语法:

GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }

ON SCHEMA schema_name [, ...]

TO role_specification [, ...] [ WITH GRANT OPTION ]

6. 对象级别的权限

每种类型的对象权限属性都不一样,以表对象为例:

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }

[, ...] | ALL [ PRIVILEGES ] }

ON { [ TABLE ] table_name [, ...]

| ALL TABLES IN SCHEMA schema_name [, ...] }

TO role_specification [, ...] [ WITH GRANT OPTION ]

7. 取消授权

REVOKE

语法格式如下:

REVOKE permission_type ON table_name FROM user_name;

其中permission_type和table_name含义与GRANT指令中相同

\h revoke

8. 查看理解权限

显示角色属性(包含系统权限)

\du

\du+ [username]

查看系统表

select * from pg_roles[pg_user];

查看某用户或角色的权限

select * from information_schema.table_privileges where grantee='u1';

显示对象的访问权限列表

\z

\dp [tablename]

#得到权限说明如下

Schema | Name | Type | Access privileges | Column privileges | Policies

--------+-----------------+----------+--------------------------------+-------------------+----------

public | sbtest1 | table | postgres=arwdDxt/postgres +| |

| | | postgres=a*r*w*d*D*x*t*/postgres | |

public | sbtest10 | table | postgres=arwdDxt/postgres | |

public | sbtest10_id_seq | sequence | | |

public | sbtest11 | table | postgres=arwdDxt/postgres | |

public | sbtest11_id_seq | sequence | | |

public | sbtest12 | table | postgres=arwdDxt/postgres | |

public | sbtest12_id_seq | sequence | | |

解释一下 Access privileges

rolename=xxx 其中rolename就是被赋予权限的用户名,即权限被赋予给谁了?

=xxx 表示这个权限赋予给了public角色,即所有人

/yyyy 表示是谁赋予的这个权限

权限的含义如下:

rolename=xxxx -- privileges granted to a role

=xxxx -- privileges granted to PUBLIC

r -- SELECT ("read")

w -- UPDATE ("write")

a -- INSERT ("append")

d -- DELETE

D -- TRUNCATE

x -- REFERENCES

t -- TRIGGER

X -- EXECUTE

U -- USAGE

C -- CREATE

c -- CONNECT

T -- TEMPORARY

arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects)

* -- grant option for preceding privilege

/yyyy -- role that granted this privilege

示例:用户权限授予与取消

\c postgres postgres

create database testdb

\c testdb postgres

create table t1(id int) ;

select * from information_schema.table_privileges where grantee='u1';

\dp t1

create user u1;

grant all on table t1 to u1;

select * from information_schema.table_privileges where grantee='u1';

\dp t1

revoke select on table t1 from u2;

本文地址:http://www.cuug.com.cn/postgresql/jiaocheng/24499957840.html 转载请注明!


在线预约 抢先报名 获取课程排期

Oracle培训机构

金牌讲师<>

冉乃纲-老师CUUG金牌讲师
冉老师 CUUG金牌讲师 Oracle及RedHat高级讲师、Unix/Linux 资深专家...[详细了解老师]

免费咨询上课流程 客服在线中

陈卫星-老师CUUG金牌讲师
陈老师 CUUG金牌讲师 精通Oracle管理、备份恢复、性能优化 11年Ora...[详细了解老师]

免费咨询上课流程 客服在线中

选学校如何选择适合自己的学校

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。多年来,以提高教学质量为本,强调素质教育,积极引进、消化国外的新技术,有效的结合中国....[详情]

一站式服务(从入学到就业一帮到底)

入学

学习

就业

实操

食宿
地址:北京市海淀区田村山南路35号院17号楼
课程咨询:010-59426307 010-59426319 400-0909-964
企业服务:137 1818 8639(陈经理)
部分信息来源于网络,如有错误请联系指正!
版权所有@北京神脑资讯技术有限公司 (CUUG,中国UNIX用户协会) Copyright 2016 ALL Rights Reserved 京ICP备11008061号-1