PostgreSQL帮助、用户、权限操作

2023-12-21 13:58:05

一、帮助操作

查看psql的命令:psql --help
在这里插入图片描述
连接选项说明:
在这里插入图片描述

For more information, type “?” (for internal commands) or “\help” (for SQL
commands) from within psql, or consult the psql section in the PostgreSQL
documentation.

通过以上说明,我们还可以在进入psql后,查看一些命令:

\?:查看服务级别的命令
\help:查看数据库级别的命令

二、用户操作

登录:psql -h 主机名 -p 端口 -U 用户名 -W
在这里插入图片描述
查看全部用户信息:\du
在这里插入图片描述

1、创建角色

常用命令如下:

CREATE USER name [ [ WITH ] option [ ... ] ]
CREATE ROLE name [ [ WITH ] option [ ... ] ]

CREATE USER和CREATE ROLE等效,除了CREATE USER默认有连接权限,而CREATE ROLE没有,只有具有LOGIN属性的角色才能被用于一个数据库连接的初始角色名称。要创建一个带有登录权限的角色,也可以使用CREATE ROLE 名称 LOGIN;

option可以是:

SUPERUSER | NOSUPERUSER
CREATEDB | NOCREATEDB
CREATEROLE | NOCREATEROLE
INHERIT | NOINHERIT
LOGIN | NOLOGIN
REPLICATION | NOREPLICATION
BYPASSRLS | NOBYPASSRLS
CONNECTION LIMIT connlimit
[ ENCRYPTED ] PASSWORD ‘password’ | PASSWORD NULL
VALID UNTIL ‘timestamp’
IN ROLE role_name [, …]
IN GROUP role_name [, …]
ROLE role_name [, …]
ADMIN role_name [, …]
USER role_name [, …]
SYSID uid

具体可以查看官方中文文档

构建一个超级管理员用户root,密码为root:create user root with SUPERUSER PASSWORD 'root'
退出psql命令行:\q
重新登录:psql -h 192.169.56.100 -p 5432 -U root -W
在这里插入图片描述

出现错误,数据库不存在:database “root” does not exist,新增一个数据库:create database root;
在这里插入图片描述

测试下,切换数据库:\c root
在这里插入图片描述

重新登录,正常了
在这里插入图片描述

2、修改角色

语法:ALTER ROLE role_specification [ WITH ] option [ ... ]
具体语法可以查看官方中文文档

修改用户名,从root改为root1:ALTER ROLE root RENAME TO root1;
在这里插入图片描述

3、删除角色

语法:DROP ROLE [ IF EXISTS ] name [, ...]

IF EXISTS
如果该角色不存在则不要抛出一个错误,而是发出一个提示。
name
要移除的角色的名称。

删除root1角色:DROP ROLE root1;
在这里插入图片描述

三、权限操作

1、逻辑结构

PostgreSQL的逻辑结构如下图:
在这里插入图片描述

可以看到PostgreSQL一个数据库(Database)中有多个模式(Schema),在每个schema下都有自己的库表信息,权限粒度会比MySQL更细一些。

参数说明:

  • 服务器(Server):在 PostgreSQL 中,服务器是指一个独立的数据库管理系统实例。每个服务器都有自己的配置和运行环境,可以独立地处理数据库请求。
  • 集群(Cluster):集群是指由一个或多个服务器组成的逻辑集合。在 PostgreSQL 中,一个集群可以包含多个数据库。每个数据库都属于一个特定的集群。
  • 表空间(Tablespace):表空间是用于存储数据库对象的物理位置。它可以是一个文件系统目录或一个独立的磁盘分区。通过将表空间分配给数据库,可以将数据库对象存储在不同的物理位置上,以实现数据的分离和管理。
  • 数据库(Database):数据库是数据的集合,用于组织和存储相关数据。
  • 模式(Schema):模式是数据库中的逻辑容器,用于组织和分隔对象。

2、权限分层

在PostgreSQL中,权限的管理分为很多层:

  • Server、Cluster、Tablespace级权限:这个级别一般是基于pg_hba.conf去配置
  • Database级权限:通过grant命令去设置控制用户对整个数据库的访问和操作权限,例如创建表、修改表结构等。
  • Schema级权限:用得少
  • 对象级权限:通过grant命令去设置控制用户对特定数据库对象(如表、视图、函数)的访问和操作权限。

3、实战

#构建用户
create user forlan with password 'forlan';
#构建数据库
create database forlan;
#切换数据库
\c forlan;
#构建schema
create schema forlanSchema;
#将这个schema的拥有者改为forlan用户
alter schema forlanSchema owner to forlan;
#将forlan库下的forlan的schema中的表的增,改,查权限赋予给forlan用户
grant select,insert,update on all tables in schema forlanSchema to forlan;

验证是否配置成功,使用forlan用户连接forlan数据库,出现异常,如下:

forlan=# \c forlan -forlan 
FATAL:  Peer authentication failed for user "-forlan"
Previous connection kept

原因是因为我们的pg_hba.conf如下,当前系统用户只有postgres,没有forlan,无法使用peer连接
在这里插入图片描述
可以使用远程连接,使用host这种,并展示当前数据库中的所有模式(schemas)的列表:\dn,如下:
在这里插入图片描述
数据库默认有一个public的schema,归属postgres

文章来源:https://blog.csdn.net/qq_36433289/article/details/135070820
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。