小程序制作平台网站设计平台 互联网品牌制作专家
关于A5客户收购GoogleAdsense带有搜索账户的相关事宜更多

软文发布平台资讯中心

Postgresql数据库权限功能的使用总结

Postgresql数据库权限功能的使用总结

  项目招商找A5 快速获取精准代理名单

Postgresql数据库支持灵活的权限管理,可以控制一个角色(组、用户)对某张表的读、写、更新、删除等操作权限、执行某个函数的权限以及操作(使用、更新等)视图、序列的权限。

PG的权限管理功能比较强大,可以细化到对一张表的各个字段,比如禁止用户访问一张表里的密码字段等,在稍后的内容中给出详细的解释。

虽然在PG数据库中把用户、角色统一叫做角色,甚至创建语句都为create role XXX,但用户和角色之间仍有一定的区别。在这里我们统一把拥有登录权限的叫做用户,没有登录权限的叫做角色,用此方式加以区分。

实际上,在PgAdmin管理工具中,可以看到用户和角色的区别,没有登录权限的被放在组角色下,有登录权限的被放在登录角色下。

基本权限

用户和角色都可以被赋予基本权限,比如创建数据库权限、超级用户权限、创建角色权限等。

比如创建用户的语句为:

1

2CREATE ROLE guest LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

注意上述Role guest拥有LOGIN的权限,所以叫它用户。

创建角色的语句为:

1

2CREATE ROLE "group" NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;

注意这里没有LOGIN权限,所以是角色。

上述角色和用户的创建语句中,都没有赋予超级用户、创建数据库等权限。

操作数据库对象权限

只能把数据库对象的操作权限赋予没有登录权限的角色,而不能直接赋予拥有登录权限的用户。

那么这样就带来一个问题,怎么样控制登录用户操作数据库对象的权限呢?

答案是让用户成为角色的成员,此时用户即可拥有角色的权限,进一步限制了登录用户操作数据库对象的权限。

如把上述角色group赋予guest用户:

1GRANT "group" TO guest;

之后,guest用户就拥有了group角色所拥有的数据库对象权限。

比如控制group角色只能对class表执行Insert操作:

1GRANT INSERT ON TABLE class TO "group";

此时使用guest用户登录数据后,就只能对表class执行insert操作,无法执行delete、update等操作。

示例代码如下,使用guest用户登录,访问TEST数据库下的class表。

1

2

3

4

5

6

7

8

9

10

11

12

13Server [localhost]:Database [postgres]:Port [5433]:Username [postgres]: guest用户 guest 的口令:psql (9.4.5)输入 "help" 来获取帮助信息.postgres=> \c TEST您现在已经连线到数据库 "TEST",用户 "guest".TEST=> select * from class;ERROR: permission denied for relation classTEST=> insert into class values(2,'class1');INSERT 0 1

从上述结果中可以看到,guest用户没有权限查询class表,但是可以插入数据库。原因就是只对group角色赋予了class表的insert权限,然后guest用户也就只有class表的insert权限。

前面说到PG的权限管理可以细化到表的某个字段,现在继续用class表和guest用户做实验。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21TEST=> \c postgres postgres;您现在已经连线到数据库 "postgres",用户 "postgres".postgres=# \c TEST;您现在已经连线到数据库 "TEST",用户 "postgres".TEST=# grant select(num) on class to "group";GRANTTEST=# \echo 切换到postgres用户连接TEST数据库,对class表的num字段的select权限赋予group角色切换到postgres用户连接TEST数据库,对class表的num字段的select权限赋予group角色TEST=# \c TEST guest用户 guest 的口令:您现在已经连线到数据库 "TEST",用户 "guest".TEST=> \echo 切换回guest用户登录TEST数据库切换回guest用户登录TEST数据库TEST=> select * from class;ERROR: permission denied for relation classTEST=> select num from class; num----- 1 2(2 行记录)

从上述结果中可以看到,guest用户依然没有查询class表的权限,但是却有了查询class表里的num字段的权限。

在PG数据库中不单单可以控制操作表的权限,其他数据库对象,比如序列、函数、视图等都可以控制。

所以PG的权限控制功能非常强大。

补充:Postgres用户对数据库的权限

用户对数据库的权限(登录、超级用户权限)

(1)查看当前数据库中有用户highgo和用户a

highgo=#\du List of rolesRole name | Attributes | Member of-----------+------------------------------------------------+-----------a | | {}highgo | Superuser, Create role, Create DB, Replication | {}

(2)查看确认当前连接的用户为超级用户highgo,且该用户后创建角色和数据库的权限等

highgo=#select current_user;current_user--------------highgo(1row)

(3)查看当前集群中的数据库

highgo=#\l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges-----------+--------+----------+------------+------------+-------------------highgo | highgo | UTF8 | zh_CN.utf8 |zh_CN.utf8 |template0 | highgo | UTF8 | zh_CN.utf8 | zh_CN.utf8 | =c/highgo + | | | | | highgo=CTc/highgotemplate1 | highgo | UTF8 | zh_CN.utf8 | zh_CN.utf8 | =c/highgo + | | | | | highgo=CTc/highgo(3rows)

(4)使用普通用户a连接数据库正常

highgo=#\c highgo aYouare now connected to database "highgo" as user "a".highgo=>select current_user;current_user--------------a(1row)(5)使用超级用户highgo连接数据库正常highgo=>\c highgo highgoYouare now connected to database "highgo" as user "highgo".highgo=#select current_user;current_user--------------highgo(1row)

(6)在超级用户连接highgo后,设置不允许普通用户a连接数据库

highgo=#alter role a nologin;ALTER ROLEhighgo=#\c highgo a致命错误: 不允许角色"a" 进行登录Previousconnection kepthighgo=#

(7)在超级用户连接highgo后,设置不允许普通用户a连接数据库后,赋予用户a超级用户权限后仍然无法连接数据库

highgo=#alter role a superuser;ALTERROLEhighgo=#\du List of rolesRole name | Attributes | Member of-----------+------------------------------------------------+-----------a | Superuser, Cannot login | {}highgo | Superuser, Create role, Create DB, Replication | {}highgo=#\c highgo a致命错误: 不允许角色"a" 进行登录Previousconnection kept

(8)将登录数据库的权限赋予用户a后,用户a可登录数据库

highgo=#alter role a login;ALTERROLEhighgo=#\c highgo aYouare now connected to database "highgo" as user "a".highgo=#select current_user;current_user--------------a(1row)

文章来源:脚本之家

来源地址:https://www.jb51.net/article/205417.htm

尊敬的看官您对Postgresql数据库权限功能的使用总结有什么看法呢?互联网品牌制作专家愿与您共同探讨!版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请加微信号oem365 举报,一经查实,本站将立刻删除。

上一篇: 淘宝极速推广的展现位置在哪?咋推广产品?   返 回   下一篇:postgresql删除重复数据的几种方法小结

相关资讯

小程序应用场景 | 小程序解决方案 | 小程序案例 | 小程序应功能 | 软文发布资源 | 网站设计

酒店预约解决方案
酒店预约小程序走红网络,也是传统转型的重要变化
详情
投票解决方案
强大功能,傻瓜式管理,有效防止作弊刷票
详情
新零售解决方案
小程序是现在新零售的新方式,深度结合线上线下
详情
预约服务解决方案
预约到店小程序通过用户在线预约到店等
详情
企业官网解决方案
企业展示小程序主要展示企业信息、产品案例等
详情
教育培训解决方案
主要展示教育机构的课程、可在线预约与购买课程
详情
推广解决方案
可以让企业通过推广模式全面展示自己的产品
详情
到店解决方案
到店服务解决方案,主要是面向实体餐饮门店
详情

我们的服务是否能满足您的需求?

如果不能,请联系我们或给我们留言,我们收到后会第一时间联系您!感谢您对我们的关注!

粤公网安备 44200002005005号