热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PostgreSQL访问和权限,咱们捋一捋

在PostgreSQL中的访问和权限,在学习的初期是很容易搞不清楚的,而由于这方面的事情

在PostgreSQL中的访问和权限,在学习的初期是很容易搞不清楚的,而由于这方面的事情也浪费很不少的时间,所以本期捋一捋,这方面的问题和知识。

和其他众多的数据库不同,PostgreSQL 的访问如果是精通其他数据库的DBER 们也容易在阴沟里面帆船。PostgreSQL 的访问分为两个部分,


1 你的用户能不能进入到服务器

2 你的用户的权限能不能访问指定的东西


如果非要举一个例子找一个雷同的数据库,我只能想到 SQL SERVER ,因为SQL SERVER的 用户也分为 登录用户和数据库用户,这是因为SQL SERVER 原来在WINDOWS 上的域账号之类引起的与其他数据库用户不同的地方。


话归正传,我们先来假设你有PG的数据库的权限,无论大小但你至少应该能登录进来吧。但很多时候你连接和登录都报错类似下面的

下面已经提及了一个文件 pg_hba.conf 文件,下图中提示到 pg_hba.conf 没有我现在输入账号访问数据库的进入的权利。


OK ,我们就先从 pg_hba.conf 来开始

pg_hba.conf 他是一个客户端的认证的文件,如果要理解的话可以理解为 mysql 创建账号后的 @ 后面的东西,是 % (全都可以访问),还是 IP 等等,他限制的并不是权限,而是你是来自于哪里的问题,这属于的是一个安全性的问题。


那么下面就的看看 怎么设置能让我连接到数据库,相关的PG_HBA.CONF的格式如下

TYPE  DATABASE        USER            ADDRESS                 METHOD

主要是由 type  database  user  address method 组成的

type 是访问数据库节点的方式,介绍两种,在数据库服务器所在位置进行访问,也叫 local 也可以理解是通过socket的方式访问, 另一种是通过TCP/IP协议进行访问,也就是非本地的方式,这样的也叫host 的方式。

而我们目前的访问的方法(通过PG ADMIN)显然是后者。


DATABASE 是你限定这个访问你数据库的账户,只能访问你数据库实例的中的某一个数据库,如果你写成 all 则是可以运行访问所有的数据库(当然仅仅是允许访问,能不能访问还要看你数据库内部的权限授予情况)


User 就是你访问数据库实例到底是用的那个账户来进行访问的,如看门大爷的问你是谁,不是随随便便的阿猫阿狗都可以放进来,当然如果你写了all 那就相当于把看门问谁来的大爷职位 fired 了


Address 更好理解,就是问你那里来的,这里有一个误区,例如我实际访问这台机器的地址是 10开头的网段的,但经过无数的网关到这里已经被转换了,所以需要和服务器一致的网段的地址,如果你不知道,看一下上面 pg_admin 提供给你的错误信息就一目了然,你应该写那个IP 了。


最后method 有不少可以选择的选择项,这里不会说那么多,只会提及两个md5 和 trust ,为啥,因为常用。这两个选择项大致的意思就是我信任你,给妃嫔出门证,你呢只要符合是哪位“妃嫔”,那个宫里出来的,就直接进入,那如果你是那位皇上,你就给人家一个 trust 信任人家呗。

反过来,你要是想刁难一下 ,md5 也是可以的,就告诉来者,必须输入密码,不输入密码,别想进,发送过来的密码也是要加密的。


当然上面的介绍比较单纯,其实选择项很多,如果你有更深层次的需求,还请看官方文档,例如来着必须是  SSL 连接来的,来者的身份验证方式不是上面两种的,要pam 的方式等等。


这里看上图,上面已经设置了 

host (远程访问方式)   all (可以访问所有的数据库,但能不能访问还的看你的权限)  用户 (admin) 从哪里来的 (从192.168.198.1 )来的 ,通过加密的密码来访问的,可以进入。


在保存了这些信息后,需要将数据库进行reload ,就是将信息重新加载到数据库的缓冲中,然后我们在进行数据库的访问。

OK 已经可以访问到了数据库了。

但这里需要说明的是,如果我在此将他的权限禁止掉,并且重新reload 信息到缓冲,你的当前已经进入的连接也是不受影响的。(基本上所有的数据库都是这样),你千万不要认为,我修改了配置,reload 就OK 了。要不你重启动数据服务,要不你清理掉现有的连接。



这里有一个问题需要搞清楚,就是读取pg_hba.conf 的顺序问题,不正当的次序的设置可能会造成你的设置和你预想的不同,我们看上图,

我允许了 192.168.198.1 进入的以admin 账户开始的连接,而下面又设置了拒绝全部的远程连接。到底哪个会生效?


我们创建另一个账户test ,并且拥有最大的权限

而结果是,访问被拒绝了,而继续使用admin账户来进行访问是可以的,及时有0.0.0.0  禁止全网段访问的设置,这就推出一个结论,pg_hba.conf 的执行顺序是从上到下的。

那我们在更改pg_hba.conf 的位置

结果就是原先能访问的admin的账户也不能访问了,所以pg_hba.conf的设置也应该是


1  从小到大进行设置,也就是权限的设置应该是从细致到粗放,从允许到拒绝这么一个思路来进行

2  对于现有的连接,即使reload 也对目前已经建立的连接无效。


下面的一个问题就是涉及到数据库本身的权限问题了。


在PG 里面是有默认的role的,

SELECT rolname FROM pg_roles where rolname like 'pg%';

而每建立一个用户,其实就相当于建立一个角色,而role 和 user 的区别

很多时候由是否可以登录数据库服务器作为区别之一。

而如果我们需要一个用户仅仅对所有的数据库有select 的权限可以这样做

创建一个用户 select_only 密码是 select_only

create user select_only with password 'select_only';

赋予这个用户 登录数据库的权限

alter user select_only login;

赋予这个select_only 用户 读取所有数据库的 public schema 的权限

grant select  ON ALL TABLES IN SCHEMA public to select_only;


估计这个时候会有同学问,哎,你到底是给那个数据库进行赋值的,当前数据库,你执行命令当前所在的数据库将允许这个用户对数据库进行访问。


而如果你想拥有超级权限也很简单

alter user username superuser;   就可以获得你要的所有权限,为所欲为。


至于更深层次的为各种 object 进行赋值等,各位看官还是去看官方文档比较合适快速。


另如果想快速获得数据库里面的表中到底有多少用户可以访问这个表并且有什么权限可以键入 \dp 将当前数据库的信息展示,重要的地方在于 access privileges ,同时也可以搞清楚到底有多少用户对这个表有权限


下面就是access privileges 中 权限简写

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)


最后,修改权限后是立即生效。





推荐阅读
  • 如何搭建服务器环境php(2023年最新解答)
    导读:本篇文章编程笔记来给大家介绍有关如何搭建服务器环境php的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、怎么搭建p ... [详细]
  • 开发笔记:对称加密详解,以及JAVA简单实现
     (原)常用的加密有3种1、正向加密,如MD5,加密后密文固定,目前还没办法破解,但是可以能过数据库撞库有一定概率找到,不过现 ... [详细]
  • 问题描述:域名已经备案,我全部都有,也在后台配置了,但是手机预览,还是请求失败,PC端是可以请求 ... [详细]
  • MySQL中如何使用MD5加密
    这篇文章主要介绍“MySQL中如何使用MD5加密”,在日常操作中,相信很多人在MySQL中如何使用MD5加密问题上存在疑惑,小编查阅了各式资料,整理出简 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  •   一、GeoTrust证书的相关介绍    GeoTrust成立于2001年,其到2006年就占领了全球市场25%的市场份额,所以GeoTrust是目前全球第二大的数字证书颁发机 ... [详细]
  • linux6.5 配置邮件服务,centos 6.5服务器搭建邮件服务postfix和dovecot
    centos6.5搭建邮件服务postfix和dovecot------------------------------------------------安装DNS指定邮件交换记 ... [详细]
  • 痞子衡嵌入式:对比MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异...
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异。近 ... [详细]
  • 总结:常见php页面漏洞分析及相关问题解决
    php教程|php手册PHP,phpBB,topic,Socket,SQLphp教程-php手册  从现在的网络安全来看,大家最关注和接触最多的WEB页面漏洞应该是ASP了,在这方 ... [详细]
author-avatar
一号小蘑菇妖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有