PG_PERMISSION:检查您的PostgreSQL安全系统

本文翻译自: https://www.cybertec-postgresql.com/en/pg_permission-inspecting-your-postgresql-security-system/?from=groupmessage&isappinstalled=0

安全性是一个很重要的话题。它不仅仅只存在于PostgreQL中,整个IT系统中都是如此。然而数据库会有特殊的安全要求。数据库通常存放的是机密数据,因此数据得到合适的保护是有意义的。安全第一!

PostgreSQL 列出所有权限

在PostgreSQL中获取授予用户的所有权限概述可能相当困难。但是,如果您想要保护您的系统,获取一个概述真的很重要 — 忘记这里或那里的权限很容易,这可能给我们解决问题带来不小的困难。为了让操作更加的简单,Cybertec实现了pg_permission(https://github.com/cybertec-postgresql/pg_permission)。有两件事可以通过pg_permission来实现:

l 获取一个列出所有权限的快速概述

l 把你的“期望状态”与你得到的值作比对

l 立即修复错误

简而言之:pg_permission权限可以做的不仅仅是列出存在的内容。但是,让我们先从简单的例子开始 — 列出所有权限。pg_permission提供了几个视图,一旦部署了扩展,就可以直接访问它。下面是一个例子:

test=# \xExpanded display is on.test=# SELECT * FROM all_permissions WHERE role_name = ‘workspace_owner’;-[ RECORD 1 ]-------------------------------------------------------object_type | TABLErole_name | workspace_ownerschema_name | publicobject_name | bcolumn_name | permission | SELECTgranted | t-[ RECORD 2 ]-------------------------------------------------------object_type | TABLErole_name | workspace_ownerschema_name | publicobject_name | bcolumn_name | permission | INSERTgranted | t-[ RECORD 3 ]-------------------------------------------------------object_type | TABLErole_name | workspace_ownerschema_name | publicobject_name | bcolumn_name | permission | UPDATEgranted | f

最简单的办法是使用“all_permissions”视图来获取所有内容的概述。但是如果你只对函数、表、字段、模式感兴趣,那么会有更多的视图供你使用。“all_permissions”将简单的向您显示以下内容:

CREATE VIEW all_permissions ASSELECT * FROM table_permissionsUNION ALLSELECT * FROM view_permissionsUNION ALLSELECT * FROM column_permissionsUNION ALLSELECT * FROM sequence_permissionsUNION ALLSELECT * FROM function_permissionsUNION ALLSELECT * FROM schema_permissionsUNION ALLSELECT * FROM database_permissions;

PostgreSQL 检测安全问题

当您的应用较小时,保护您的应用不是一件困难的事 — 但是,如果您的数据模型正在改变,小的错误和缺陷可能会潜入,从长远来看会造成严重的安全问题。pg_permissions解决了这个问题:你可以声明,世界是怎样的。那是什么意思?这里有一个例子:”所有bookkeepers都应被允许读取bookeeping模式中的数据。” 或者“所有人都应拥有所有模式的USAGE权限”。你现在所能做的就是将这个世界与你想要的世界进行比较。它的工作原理如下:

INSERT INTO public.permission_target (id, role_name, permissions, object_type, schema_name)VALUES (3, ‘appuser’, ‘{USAGE}’, ‘SCHEMA’, ‘appschema’);

用户还需要对该模式中的appseq序列具有USAGE权限:

INSERT INTO public.permission_target (id, role_name, permissions, object_type, schema_name, object_name)VALUES (4, ‘appuser’, ‘{USAGE}’, ‘SEQUENCE’, ‘appschema’, ‘appseq’);SELECT * FROM public.permission_diffs();missing | role_name | object_type | schema_name | object_name | column_name | permission---------±----------±------------±------------±------------±------------±----------- f | hans | VIEW | appschema | appview | | SELECT t | appuser | TABLE | appschema | apptable | | DELETE(2 rows)

你会立即得到一个概述并看到,你的理想状态和当前状态之间存在哪些差异。通过在部署过程中直接检查差异, 我们的扩展将允许您快速响应和解决问题。

更改权限越快越好

一但您知道有哪些权限可能丢失,哪些是错误的,您可能需要修复这些问题。基本上有两种选择:您可以手动修复内容并逐个分配权限。那会很痛苦,会导致很多工作。所以为什么不直接更新“all_permissions”视图呢?pg_permissions允许您这样做……您可以简单地更新视图,pg_permissions将为您执行所需的更改(在后台执行GRANT和REVOKE语句操作)。通过这种方式,您可以使用简单的update语句更改数百甚至数千个权限。保护数据库从未如此简单。

许多人正在GRANT和REVOKE语句里挣扎。因此,能够使用UPDATE可能会使许多PostgreSQL用户的操作更简单。

让pg_permission变得更好

我们想让pg_permission更加完善。所以,如果有什么好主意,随时联系我们。我们热切地寻找新的想法,甚至更好的概念。

译者:杨栋,神州飞象(北京)数据科技有限公司,数据库工程师,多年关系数据库运维经验,擅长于生产/灾备系统建设,具有丰富的数据库开发支持经验和数据迁移经验。

审稿:方笛,神州飞象(北京)数据科技有限公司,数据库工程师,多年关系数据库运维经验,擅长于PostgreSQL的调优和运维,具有丰富的数据库调优和异构数据库迁移经验。

  大连包皮手术多少钱 http://mobile.84211111.org/

   http://mobile.dlbhyy.me/

  大连好的妇科医院 http://mobile.0411fuke.com/

猜你喜欢

转载自blog.csdn.net/qq_42894764/article/details/88970117
今日推荐