Toggle navigation
PostgreSQL中文社区
首页
(current)
社区新闻
中文文档
加入ACE
相关资料
了解PostgreSQL
PostgreSQL相关文档
PostgreSQL软件下载
PostgreSQL中文图书
社区年会PPT资料
关于中文社区
注册
登录
全部
社区活动
技术讨论
新闻综述
强人随笔
会议资料
其他
首页
社区新闻
其他
PG_PERMISSION_检查您的PostgreSQL安全系统
采编:
doudou586
发布时间:
2019-03-06 12:59:58
欢迎大家踊跃投稿,投稿信箱:
press@postgres.cn
评论:
0
浏览:
4747
**翻译:杨栋** > 本文翻译自: 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来实现: - 获取一个列出所有权限的快速概述 - 把你的“期望状态”与你得到的值作比对 - 立即修复错误 简而言之:pg_permission权限可以做的不仅仅是列出存在的内容。但是,让我们先从简单的例子开始 — 列出所有权限。pg_permission提供了几个视图,一旦部署了扩展,就可以直接访问它。下面是一个例子: ``` test=# \x Expanded display is on. test=# SELECT * FROM all_permissions WHERE role_name = 'workspace_owner'; -[ RECORD 1 ]------------------------------------------------------- object_type | TABLE role_name | workspace_owner schema_name | public object_name | b column_name | permission | SELECT granted | t -[ RECORD 2 ]------------------------------------------------------- object_type | TABLE role_name | workspace_owner schema_name | public object_name | b column_name | permission | INSERT granted | t -[ RECORD 3 ]------------------------------------------------------- object_type | TABLE role_name | workspace_owner schema_name | public object_name | b column_name | permission | UPDATE granted | f ``` 最简单的办法是使用“all\_permissions”视图来获取所有内容的概述。但是如果你只对函数、表、字段、模式感兴趣,那么会有更多的视图供你使用。“all\_permissions”将简单的向您显示以下内容: ``` CREATE VIEW all_permissions AS SELECT * FROM table_permissions UNION ALL SELECT * FROM view_permissions UNION ALL SELECT * FROM column_permissions UNION ALL SELECT * FROM sequence_permissions UNION ALL SELECT * FROM function_permissions UNION ALL SELECT * FROM schema_permissions UNION ALL SELECT * 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的调优和运维,具有丰富的数据库调优和异构数据库迁移经验。 ... ![CENTER_PostgreSQL_Community](/images/news/2016/pg_bot_banner.jpg)
请在
登录
后发表评论,否则无法保存。
发表评论:
您还没有登录,请您登录后再发表评论
© 2010 PostgreSQL中文社区