PostgreSQL帮助、用户、权限操作
一、帮助操作
查看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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!