 博主 "开着拖拉机回家"带您 Go to New World.✨

濾 个人主页——开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 ✨

嬨 希望本文能够给您带来一定的帮助文章粗浅,敬请批评指正!

目录

 博主 "开着拖拉机回家"带您 Go to New World.✨

一、PostgreSQL权限概述

1.1 初始角色

1.2 权限 - PRIVILEGES

1.3 权限的组成

1.4 特殊的权限

1、owner拥有特权

2、PUBLIC

1.5 授权 - GRANT

二、Schema创建和授权实操

三、重新为用户授权

四、查询schema是否存在

五、客户端鉴权

六、postgresql 执行sql文件

一、PostgreSQL权限概述

1.1 初始角色

数据库刚创建时,会自动创建一个超级用户的角色:postgres。任何操作都是从该用户开始的。

PostgreSQL权限管理详解_pgsql权限管理_zou8944的博客-CSDN博客(摘录博客)

1.2 权限 - PRIVILEGES

角色有了,决定角色能够执行哪些数据库操作,则需要权限进行管理。PG将权限分为了两部分。这里所说的权限,主要指第二部分

能否登录、创建database、创建role,这类重要权限,在创建role时指定;在pg_roles表中可查看对数据库对象的各类操作的权限,通过GRANT手动授予;在information_schema.xxx_privileges表中可查看,比如information_schema.table_privileges

1.3 权限的组成

一个完整的权限描述:角色A对表table1具有SELECT权限,有三部分组成

角色:A授权目标:table1权限:SELECT

1.4 特殊的权限

1、owner拥有特权

当一个数据库对象被创建后,它会被自动分配一个owner,一般来说是执行创建语句的那个角色。大多数情况下,owner及其成员能够对该对象做任何事,如果其他人想要操作它,则需要GRANT授权。

可修改owner,超级用户、对象原本的owner、owner的成员都能够调整对象的owner

alter table table_name owner to new_owner;

2、PUBLIC

PUBLIC并不是一个真正的角色,确切地说,它应该算一个关键字,当授权的目标是它时,表示:授予系统中的所有角色,包括今后定义的角色。

PUBLIC默认是拥有以下权限

本地登录对public的USAGE权限对public的CREATE权限

字面意思理解,相当于将该权限公开。

1.5 授权 - GRANT

-- 授予权限

GRANT {权限} ON {授权目标} TO {被授权角色} [WITH GRANT OPTION]

-- 授予角色

GRATE {角色} TO {被授权角色} [WITH ADMIN OPTION] [GRANTED BY 角色]

ALL PRELEGES:它是针对一个授权目标的所有权限的总和。

WITH ADMIN OPTION:授权传递,被授权的角色,可以传递授权

# 授予用户 zhangsan 数据库 kangkang 的所有权限

grant all privileges on database kangkang to zhangsan;

# 授权当前database 的指定kangll_schema的所有表的只读权限给zhangsan 角色

grant select on all tables in schema kangll_schema to zhangsan;

如下查询结果表示:kangll_test 数据中 public 下 stu 表,kangll 用户拥有所有权限, zhang 用户拥有只读权限,都是 kangll 用户授予的。

我们换个数据库查询下,可以看到 Access privileges为空,表明:其owner对该表有完整的权限

二、Schema创建和授权实操

创建数据库 kangkang, 我使用 postgres用户 完成

CREATE DATABASE kangkang;

创建名为 zhangsan 的用户,请运行以下命令:

CREATE USER zhangsan WITH PASSWORD '123456';

-- 修改密码

alter user zhangsan with password 'password';

授予zhangsan用户 kangkang 数据库的所有权限

grant all privileges on database kangkang to zhangsan;

现在 使用zhangsan 用户登录数据库, 创建名为 kangll_schema 的 schema

CREATE SCHEMA kangll_schema;

## 删除可以执行如下命令

DROP SCHEMA kangll_schema;

执行结果:

授予名为 zhangsan 用户对名为 kangll_schema 的 schema 下表的所有操作权限

GRANT USAGE ON SCHEMA kangll_schema to zhangsan;

grant all privileges on all tables in schema kangll_schema to zhangsan;

grant all privileges on all sequences in schema kangll_schema to zhangsan;

grant select,insert,update,delete on all tables in schema kangll_schema to zhangsan;

授权完成

kangkang数据库中创建 stu 表

CREATE TABLE kangll_schema.stu(

stu_id BIGINT NOT NULL,

stu_name VARCHAR(255) NOT NULL);

# 插入数据

INSERT INTO kangll_schema.stu VALUES(1, 'kangll');

# 查询

SELECT * FROM kangll_schema.stu;

执行过程:

可以看到 zhangsan 用户对 stu 表拥有所有权限, 也可以看到 Access privileges为空

撤销 权限后 重新分配 只读权限, zhangsan 用户拥有只读权限,且权限是 zhangsan 用户授予的 ,可以看到 Access privileges 不为空 ,为zhangsan 用户的 “r” 权限。

三、重新为用户授权

-- 取消权限

REVOKE [GRANT OPTION FOR] {权限} ON {授权目标} FROM {被授权人} [CASCADE | RESTRICT]

-- 取消角色

REVOKE [ADMIN OPTION FOR] {角色} FROM {被授权角色} [CASCADE | RESTRICT]

示例:

-- 切换到doki_database下

\c kangkang

-- 收回用户在 kangll_schema 下所有表的所有权限

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA kangll_schema FROM zhangsan;

-- 为zhangsan 赋予kangkang 数据库下的查询权限

GRANT select ON all TABLES IN SCHEMA kangll_schema to zhangsan;

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA kangll_schema TO zhangsan;

执行过程:

四、查询schema是否存在

查询 PostgreSQL 数据库中是否存在某个特定的 schema,可以使用以下 SQL 命令:

SELECT * FROM information_schema.schemata WHERE schema_name = 'kangll_schema';

查询可以看到 schema_name 和 对应schema的 所属者,如果查询结果为空则对应的schema 不存在。

五、客户端鉴权

角色创建后好,还需要确认pg_hba.conf 的配置, 如果没有配置并不能直接通过网络连接到PG服务端。一般我们都是在安装完数据库就需要配置。

vim /var/lib/pgsql/15/data/pg_hba.conf

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only

local all all peer

# IPv4 local connections:

host all all 127.0.0.1/32 scram-sha-256

# IPv6 local connections:

host all all ::1/128 scram-sha-256

# Allow replication connections from localhost, by a user with the

# replication privilege.

local replication all peer

host replication all 127.0.0.1/32 scram-sha-256

host replication all ::1/128 scram-sha-256

host all all 0.0.0.0/0 md5

配置文件说明:

TYPE

local:本地连接host:使用TCP/IP连接

DATABASE: 许连接的database

USER: 允许连接的角色

ADDRESS: 允许的客户端地址,0.0.0.0/0表示允许所以客户端连接

METHOD: 鉴权方式

trust:无条件允许连接reject:无条件拒绝password:要求客户端提供未加密的密码进行身份验证,密码在网络上以明文形式传输,如果使用SSL,可以加密传输scram-sha-256:执行 SCRAM-SHA-256 身份验证,这是一种质询响应机制,这是目前最安全的方式,不过有的数据库客户端可能不支持。md5:也是一种质询响应机制peer:获取客户端操作系统的用户名,如果和请求连接的用户名一样。这只有在本地连接时才有用。xxx:都是其它的鉴权方式,官网参考: PostgreSQL: Documentation: 15: 21.1. The pg_hba.conf File

六、postgresql 执行sql文件

# 切换到postgres用户

sudo -i -u postgres

psql -d testdb -U postgres -f /opt/PostgreSQL/Ambari-DDL-Postgres-CREATE.sql

或者

sudo -u postgres psql -d kangkang -U postgres -f /opt/PostgreSQL/Ambari-DDL-Postgres-CREATE.sql

参考原文链接:PostgreSQL权限管理详解_pgsql权限管理_zou8944的博客-CSDN博客

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: