博主 "开着拖拉机回家"带您 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文件
数据库刚创建时,会自动创建一个超级用户的角色:postgres。任何操作都是从该用户开始的。
PostgreSQL权限管理详解_pgsql权限管理_zou8944的博客-CSDN博客(摘录博客)
角色有了,决定角色能够执行哪些数据库操作,则需要权限进行管理。PG将权限分为了两部分。这里所说的权限,主要指第二部分
一个完整的权限描述:角色A对表table1具有SELECT权限,有三部分组成
当一个数据库对象被创建后,它会被自动分配一个owner,一般来说是执行创建语句的那个角色。大多数情况下,owner及其成员能够对该对象做任何事,如果其他人想要操作它,则需要GRANT授权。
可修改owner,超级用户、对象原本的owner、owner的成员都能够调整对象的owner
alter table table_name owner to new_owner;
PUBLIC并不是一个真正的角色,确切地说,它应该算一个关键字,当授权的目标是它时,表示:授予系统中的所有角色,包括今后定义的角色。
PUBLIC默认是拥有以下权限
字面意思理解,相当于将该权限公开。
-- 授予权限
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对该表有完整的权限
创建数据库 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;
执行过程:
查询 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
DATABASE: 许连接的database
USER: 允许连接的角色
ADDRESS: 允许的客户端地址,0.0.0.0/0表示允许所以客户端连接
METHOD: 鉴权方式
# 切换到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博客