业务规划与创建 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。
~$ psqlpsql (15.6 (Debian 15.6-0+deb12u1))Type "help" for help.postgres=# \c mydatabaseYou 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;
GRANTmydatabase=# GRANT USAGE ON SCHEMA mydb_oa01 TO user_thb;
GRANT
mydatabase=# GRANT USAGE ON SCHEMA mydb_oa01 TO dbadmin;
GRANT
mydatabase=# \dn+List of schemasName | 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 创建数据库(初始化) 中的 配置外部访问权限
即可。