【PostgreSQL】- 1.4 PostgreSQL 业务规划(创建 Schema)

news/2024/7/9 23:16:20 标签: postgresql, 数据库

业务规划与创建 Schemas

如果实际场景,有业务A、业务B、业务C,推荐的方式是在同一个数据库中为每个业务创建不同的 schema。然后,你可以为每个业务创建不同的账户,并赋予这些账户对应业务的 schema 权限。这种方式的好处是:

隔离性:不同业务的对象被隔离在不同的 schema 中,避免了命名冲突和误操作。
权限管理:可以精细地控制每个账户对各个 schema 的访问权限,实现业务间的数据隔离和安全性。
易于管理:所有业务都集中在同一个数据库中,方便进行备份、恢复和维护。

具体步骤操作:

在 mydatabase 数据库中创建三个 schema,分别命名为 schema_a、schema_b 和 schema_c,对应业务A、业务B和业务C。
创建三个账户,分别命名为 user_a、user_b 和 user_c,用于访问对应业务的 schema。
使用 GRANT 语句为每个账户赋予对应 schema 的访问权限。例如,授予 user_a 对 schema_a 的所有权限,但限制其对其他 schema 的访问。

这样,就为每个业务创建了一个独立的命名空间,并通过账户权限实现了业务间的隔离和安全性。

在 PostgreSQL 中创建 schema 和对应的账户:

创建新用户:

登录到 PostgreSQL:

使用 psql 命令行工具以超级用户(如 postgres)身份登录到你的数据库集群。

psql -U postgres

为每个业务创建一个新用户。例如,为 oa 业务创建用户 oa_user

     CREATE USER oa_user WITH PASSWORD 'my_password_here';

重复此步骤为其他业务(如 iot, erp, mis)创建用户。

创建 Schema:

为每个业务创建一个新的 schema。

    ~$ psql
    psql (15.6 (Debian 15.6-0+deb12u1))
    Type "help" for help.
    
    postgres=# \c mydatabase
    You are now connected to database "mydatabase" as user "postgres".
    mydatabase=#   
    mydatabase=# CREATE SCHEMA mydb_oa01 AUTHORIZATION oa_user;

这创建了名为 oa 的新 schema,并将其所有权赋予 oa_user。同样地,为其他业务创建 schema。

授予数据库账户权限:

根据需要授予用户对其 schema 的适当权限。例如,要允许 oa_user 在其 oa schema 中创建表:

GRANT CREATE ON SCHEMA oa TO oa_user;

授予其他权限,如 USAGE(允许用户使用 schema 中的对象)或 ALTER(允许用户修改 schema 中的对象),可根据业务需求规划。

授权示例:

配置 dbadmin 可以访问新建的 schema

mydatabase=# GRANT USAGE ON SCHEMA mydb_thb01 TO user_oa;
GRANT
mydatabase=# GRANT USAGE ON SCHEMA mydb_thb01 TO dbadmin;
GRANT

mydatabase=# GRANT USAGE ON SCHEMA mydb_oa01 TO user_thb;
GRANT
mydatabase=# GRANT USAGE ON SCHEMA mydb_oa01 TO dbadmin;
GRANT
mydatabase=# \dn+
                                          List of schemas
    Name      |       Owner       |           Access privileges            |      Description
--------------+-------------------+----------------------------------------+------------------------
 public       | pg_database_owner | pg_database_owner=UC/pg_database_owner+| standard public schema
              |                   | =U/pg_database_owner                   |
 mydb_oa01    | user_oa           | user_oa=UC/user_oa                    +|
              |                   | user_thb=U/user_oa                    +|
              |                   | dbadmin=U/user_oa                      |
 mydb_thb01   | user_thb          | user_thb=UC/user_thb                  +|
              |                   | user_oa=U/user_thb                    +|
              |                   | dbadmin=U/user_thb                     |
(3 rows)

mydatabase=#

配置外部访问权限

编辑pg_hba.conf文件以控制访问权限, 这里参考 1.3 PostgreSQL 创建数据库(初始化) 中的 配置外部访问权限 即可。


http://www.niftyadmin.cn/n/5461317.html

相关文章

HarmonyOS 应用开发之FA模型绑定Stage模型ServiceExtensionAbility

本文介绍FA模型的三种应用组件如何绑定Stage模型的ServiceExtensionAbility组件。 PageAbility关联访问ServiceExtensionAbility PageAbility关联访问ServiceExtensionAbility和PageAbility关联访问ServiceAbility的方式完全相同。 import featureAbility from ohos.ability…

算法学习——LeetCode力扣图论篇1

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣(LeetCode) 描述 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特…

算法笔记第四章(数学知识)

数学知识 数论质数判定 约数欧拉函数快速幂扩展欧几里得算法(辗转相除法)求组合数进阶求组合数 数论 质数:在大于1的整数中,如果约数只包含1和本身,这个数就被称为质数或素数 质数判定 试除法: public …

【蓝桥杯】矩阵快速幂

一.快速幂概述 1.引例 1)题目描述: 求A^B的最后三位数表示的整数,A^B表示:A的B次方。 2)思路: 一般的思路是:求出A的B次幂,再取结果的最后三位数。但是由于计算机能够表示的数字…

linux c程序退出之exit与_exit

linux c程序退出之exit与_exit _exitexit流程清理函数atexit()函数:on_exit()函数: _exit /* Terminate program execution with the low-order 8 bits of STATUS. */ /** status参数定义了进程的终止状态,父进程可以通过wait(&…

人力资源面试题

一,个人信息了解 1,请谈一下你自己的一些情况; 1,注意突出个人优势 在面试自我介绍中,不要讲过多的废话,而是应该直接突出个人的优势,通过个人的突出优势,这样才能够提升面试官的兴…

Radash一款JavaScript最新的实用工具库,Lodash的平替!

文章目录 Lodash 的痛点进入正题--Radash特点 举例几个常用的api 一说lodash应该大部分前端同学都知道吧,陪伴我们好多年的JavaScript工具库,但是自从 ES6 出现后就慢慢退出前端人的视线,能ES6写的代码绝对不会用Lodash,也不是完全…

Playwright库page.evaluate()方法执行JavaScript 表达式

page.evaluate() 方法是 Playwright 中常用的方法之一,用于在页面上下文中执行 JavaScript 代码。它允许在浏览器环境中执行各种操作,如操作 DOM 元素、获取页面数据、执行复杂的计算等,并将结果返回到 Node.js 或 Python 代码中。 在 Playw…