一、为什么选择 PostgreSQL


自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选。

MySQL被oracle收购,innodb随之被oracle控制。

二、安装


1、MacOS

最方便的方法是安装 PostgreSQL.app。

2、Linux (CentOS 7)

(1)安装

https://tecadmin.net/install-postgresql-server-centos/

(2)启动
systemctl start postgresql-10.service
systemctl enable postgresql-10.service
(3)本地访问

先登录 shell (以 postgres 用户为例):

sudo -i -u postgresorsudo su - postgres

然后,输入:

# 以当前登录的 linux 用户名为数据库名 (这点跟 mysql 不一样,必须得先指定登录的数据库)
psql # 手动指定数据库名
psql -d postgres

想退出:

\q

解释:

1、安装成功后,PostgreSQL 会自动创建一个默认用户(且是最高权限 Superuser),名称为 postgres,密码为空。但是不支持远程登录(报错:psql: fe_sendauth: no password supplied),必须设置密码后才行(普通用户也适应这个规则)。

PostgreSQL 早期名称叫 postgres,后来在某个版本更新后就改名成了现在的 PostgreSQL。

2、PostgreSQL 每创建一个新用户,都会生成一个新的对应的 linux 同名用户,且登录此用户的 shell ,去执行psql 无需密码 ( 本质上是因为 pg_hba.conf 的配置 )

PostgreSQL 这种通过将 Linux 用户与PostgreSQL 帐户相关联来处理身份验证的方式,被称为“对等”身份验证

(4)开启远程访问

方法一:通过 ssh

1、修改pg_hba.conf

sudo vi /var/lib/pgsql/data/pg_hba.conf

然后把文件拉到底,最后一段里,将“ident”替换为“md5”,最终是这样的:

# TYPE  DATABASE        USER            ADDRESS                 METHOD# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     postgres                                peer
host    replication     postgres        127.0.0.1/32            md5
host    replication     postgres        ::1/128                 md5

若不知道 PostgreSQL 的配置文件路径,可在 PostgreSQL CLI 里输入:SHOW config_file ;

另一个重要的配置文件是/var/lib/pgsql/data/postgresql.conf

2、连接

psql -U postgres -d postgres -h xxx.xxx.xxx.xxx -W

方法二:通过 SSL 证书

略 (使用PostgreSQL设置SSL)

(5)当前登录用户

查看:

select current_user;

切换:

\c next_user;

(6)当前数据库

查看:

select current_database();

切换:

\c - next_db;

三、角色管理


从版本8.1开始,PostgreSQL使用角色概念来合并用户概念

1、默认用户

PostgreSQL 默认会有一个 Linux user 和 PostgreSQL user 都叫 postgres。这点上面有详细提到,这里不再赘述。

除了访问数据库软件之外,不要将 Linux 的 ”postgres“ 用户用于其他任何用户。这是一个重要的安全考虑因素。

2、管理用户

(1)查看所有用户

\du

                                                            List of rolesRole name       |                   Attributes                   |                          Member of----------------------+------------------------------------------------+---------------------------------------
-----------------------pg_monitor           | Cannot login                                   | {pg_read_all_settings,pg_read_all_stat
s,pg_stat_scan_tables}pg_read_all_settings | Cannot login                                   | {}pg_read_all_stats    | Cannot login                                   | {}pg_signal_backend    | Cannot login                                   | {}pg_stat_scan_tables  | Cannot login                                   | {}postgres             | Superuser, Create role, Create DB, Replication | {}
(2)创建新用户

建议:为每个应用程序创建单独的角色(Linux user + PostgreSQL user)。

CREATE ROLE role_name;

CREATE USER role_name; 可以默认给用户加上 LOGIN 权限。

角色创建时定义权限:

CREATE ROLE role_name WITH LOGIN;

角色权限的详细介绍看下面。

(3)删除用户

DROP ROLE role_name;

DROP ROLE IF EXISTS role_name; (不报错写法)

(4)用户权限

查看所有的权限种类:

\h CREATE ROLE

Command:     CREATE ROLE
Description: define a new database role
Syntax:
CREATE ROLE name [ [ WITH ] option [ ... ] ]where option can be:SUPERUSER | NOSUPERUSER| CREATEDB | NOCREATEDB| CREATEROLE | NOCREATEROLE| CREATEUSER | NOCREATEUSER| INHERIT | NOINHERIT| LOGIN | NOLOGIN| REPLICATION | NOREPLICATION| CONNECTION LIMIT connlimit| [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'| VALID UNTIL 'timestamp'| IN ROLE role_name [, ...]| IN GROUP role_name [, ...]| ROLE role_name [, ...]| ADMIN role_name [, ...]| USER role_name [, ...]| SYSID uid

更改用户权限:

ALTER ROLE role_name WITH attribute_options;

PASSWORD 也算权限的一种:ALTER ROLE role_name WITH PASSWORD 'xxxx';

3、数据操作 & owner - 所有者权限

(1) 数据库层级

PostgreSQL 的层级还是蛮深的,database -> schema -> object(table)

而 mysql 忽略了schema这个层级,就很方便。

(2) 数据库

创建:

CREATE DATABASE test_db;

CREATE DATABASE test_db OWNER role_name; (创建时指定数据库 owner)

删除:

DROP DATABASE test_db;

更改 owner:

ALTER DATABASE test_db owner to role_name;

查看 & owner 权限:

\l

                                    List of databasesName        |  Owner   | Encoding  |   Collate   | Ctype |   Access privileges
--------------------+----------+-----------+-------------+-------+-----------------------postgres           | postgres | SQL_ASCII | en_US.UTF-8 | C     |space_production | space  | SQL_ASCII | en_US.UTF-8 | C     | =Tc/space          +|          |           |             |       | space=CTc/spacetemplate0          | postgres | SQL_ASCII | en_US.UTF-8 | C     | =c/postgres          +|          |           |             |       | postgres=CTc/postgrestemplate1          | postgres | SQL_ASCII | en_US.UTF-8 | C     | =c/postgres          +|          |           |             |       | postgres=CTc/postgres
(3) Schema

创建:

删除:

更改 owner:

ALTER SCHEMA "public" OWNER TO role_name;

查看 & owner 权限:

\dnS

        List of schemasName        |  Owner
--------------------+----------information_schema | postgrespg_catalog         | postgrespg_temp_1          | postgrespg_temp_3          | postgrespg_temp_4          | postgrespg_toast           | postgrespg_toast_temp_1    | postgrespg_toast_temp_3    | postgrespg_toast_temp_4    | postgrespublic             | test
(4) 数据表

创建:

删除:

更改 owner:

ALTER TABLE test_table OWNER to role_name;

查看:

\d

                      List of relationsSchema |              Name              |   Type   |  Owner
--------+--------------------------------+----------+---------public | Admins                         | table    | testpublic | Admins_id_seq                  | sequence | test

4、 访问权限 - Access privileges

初始状态只有 owner(或超级用户) 有所有权限。但要允许其他角色拥有权限(或部分权限),必须授予。

(1)添加

GRANT permission_type on test_table to role_name;

permission_type : ALL、CRUD(如UPDATE) 、CONNECT……

role_name:可以替换成 PUBLIC 代表所有用户,或者 group 用户。

(2)查看

\z

                                         Access privilegesSchema |              Name              |   Type   | Access privileges | Column access privileges
--------+--------------------------------+----------+-------------------+--------------------------public | Admins                         | table    |                   |public | Admins_id_seq                  | sequence |                   | 

(3)删除

REVOKE 替换上面的 GRANT

5、组 & 子角色

(1) 先创建组角色
CREATE ROLE temporary_users; 
(2) 再创建组角色的成员
GRANT temporary_users TO test_user_1;
GRANT temporary_users TO test_user_2;

于是,test_user_1 和 test_user_2 这两个用户可以通过操纵“temporary_users”组角色来管理其权限,而不是单独管理每个成员。很方便。

查看组角色情况:

\du

                                    List of rolesRole name    |                   Attributes                   |     Member of
-----------------+------------------------------------------------+-------------------test_user_1     |                                                | {temporary_users}postgres        | Superuser, Create role, Create DB, Replication | {}temporary_users | Cannot login                                   | {}test_user_2     |                                                | {temporary_users}
(3) 组角色成员 获取 组角色 的权限

方法一:set role

SET ROLE temporary_users;
RESET ROLE;

如果是“postgres”用户(即超级用户),即便我们不是该组的成员,我们也可以使用“set role”。

方法二: 用 alter role ,避免以后每次都要 set role

ALTER ROLE test_user_2 INHERIT;
(4) 删除组角色

就跟删除普通的用户一样:

DROP ROLE temporary_users;

如果此用户拥有一些数据,请先转移 owner,再删除用户,不然会失败报错。

删除组成员不会把属于组成员的成员删除。


参考资料

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-centos-7

转载于:https://www.cnblogs.com/xjnotxj/p/11198255.html

PostgreSQL 安装 用户配置相关推荐

  1. post修改服务器数据源,postgresql安装及配置超详细教程

    1. 安装 根据业务需求选择版本,官网下载 初始化数据库 执行完初始化任务之后,postgresql 会自动创建和生成两个用户和一个数据库: linux 系统用户 postgres:管理数据库的系统用 ...

  2. PostgreSQL安装与配置

    PostgreSQL安装与配置 此文以PostgreSQL 10版本为例! 如未指定,下述命令在所有节点执行! 系统资源及组件规划 节点名称 系统名称 CPU/内存 网卡 磁盘 IP地址 OS Pos ...

  3. windows下PostgreSQL 安装与配置

    下载地址 https://www.postgresql.org/download/ Download the installer certified by EnterpriseDB for all s ...

  4. postgresql定义访问ip与用户_Postgresql-12.1最新版本在线安装以及配置使用全流程

    Postgresql-12.1最新版本在线安装以及配置使用全流程 Postgresql-12.1简单介绍 PostgreSQL 12.1 已经发布,该版本在各方面都得到了加强,包括显著地提升查询性能, ...

  5. postgresql 远程用户_liunx环境下安装PostgresSQL,开启远程连接

    准备工作 # 检查PostgreSQL 是否已经安装 [root@localhost ~] rpm -qa | grep postgres # 检查PostgreSQL 安装位置 [root@loca ...

  6. postergresql mysql_PosttgreSQL快速入门:PostgreSQL的安装和配置

    一.在CentOS上安装PostgreSQL数据库 下面我们就以CentOS系统为例,给大家讲解一下PostgreSQL的安装过程. 1.使用yum安装postgresql [pengchengxia ...

  7. centos下nginx+postgresql+php+memcached+apc安装与配置

    2019独角兽企业重金招聘Python工程师标准>>> 具体安装步骤如下: 具体安装软件包: nginx1.0.13wget http://nginx.org/download/ng ...

  8. PostgreSQL 安装配置 (亲测可用)

    转自:http://blog.csdn.net/jesseyoung/article/details/41348835 受作者博客限制,请访问上面的链接 ---------- 下面是另一个转载 --- ...

  9. postgresql的安装与配置

    一.安装(以root身份进行) 1.检出最新的postgresql的yum配置从http://yum.pgsqlrpms.org/reporpms/repoview/pgdg-centos.html ...

最新文章

  1. java.lang.ArithmeticException: divide by zero
  2. js数组按照下标对象的属性排序
  3. 数据结构之列表 timeit
  4. 洛谷 P2573 [SCOI2012]滑雪
  5. 成功解决WARNING: You do not appear to have an NVIDIA GPU supported by the 430.34 NVIDIA Linux graph
  6. 【mysq】远程访问权限(允许远程连接)
  7. qpaint 在graphicsview上的qimage画一条线_solidworks2016画一个塑料外壳:用开放的草图进行切除,你会吗?...
  8. 软件外包项目中的进度管理
  9. py库: GUI(tkinter)
  10. Q96:过程纹理(Procedural Texture)(0)——概述
  11. Failed to load VMMR0.r0 (VERR_SUPLIB_OWNER_NOT_ROOT)
  12. 为什么使用梯度下降法或者梯度上升法
  13. 计算机代数与数论pdf,计算机代数与数论.pdf
  14. 三阶魔方学习(新手入门)
  15. 【札记】二 先天八卦与后天八卦
  16. nodejs android ios,NodeJs 搭建WebSocket Push Server Web Android iOS Client
  17. 字母异位词(anagram)的不同复杂度实现
  18. 计算机科学丛书数据库系统,计算机科学丛书:数据库系统概念 读书笔记(十四)--事务(示例代码)...
  19. JS逆向hook通用脚本合集
  20. Java面试题——基础篇二

热门文章

  1. CodePage简介(转)
  2. visio生成数据表图
  3. java显示长度和第一个字符_从Java字符串中以长度1的字符串返回的第一个字母的最佳方法是什么?...
  4. 服务器 风扇测试软件,图解服务器风扇安装的正确方法
  5. 操作系统上机作业--使用系统调用实现mycat
  6. python脚本:判断字符是否为中文
  7. ruby打印_Ruby程序打印数字的力量
  8. weakhashmap_Java WeakHashMap values()方法与示例
  9. c#数组获取元素的索引_获取元素集合 从C#中的指定索引
  10. Vestigium-Google CodeJam 2020资格回合问题1解决方案