草庐IT

选择:成本和安全?我都要!

腾讯云数据库 2023-03-28 原文

数据库安全,是指以保护数据库系统、数据库服务器和数据库中的数据、应用、存储,以及相关网络连接为目的,防止数据库系统及其数据遭到泄露、篡改或破坏的安全技术。

数据库是企业最为核心的数据保护对象。与传统的网络安全防护体系不同,数据库安全技术更加注重从客户内部的角度出发做安全,其安全要求包括了保密性、完整性和可用性,即CIA(Confidentiality, Integrity, Availability)的三个方面。

但对于传统数据库服务而言,要保证达到这些安全要求是复杂且困难的,需要从前端(业务)到后端(数据库以及服务器)各方面的整改和体系化的建设才能符合高标准的安全需求,例如等保三级等合规性要求。这同时也意味着对客户而言,要投入巨大的人力、物力、财力。

如果在云端就能拥有这些安全能力,客户就无需为以上安全建设成本担忧。腾讯云数据库对数据库安全技术进行统一支持后,所有客户均可复用,从而减少客户的数据库安全成本投入。而腾讯云数据库PostgreSQL到底提供哪些数据库安全能力呢?本文将主要从数据安全,实例安全两方面进行详细介绍。

一、数据安全

TDE数据加密

透明数据加密(Transparent Data Encryption,以下简称 TDE)提供文件级别的加密,可以做到对数据库上层的应用透明,而存储在硬盘上的数据是加密的,对磁盘数据读取和写入时透明地进行加解密,且这个过程中用户无需自行修改业务代码

透明数据加密常用于解决一些安全合规问题,如PCI DSS、等级安全保护等要求静态数据需要被保护的场景。

腾讯云数据库 PostgreSQL 通过向用户申请使用 KMS(Key Management Service)服务中保存的主密钥,生成 DEK(Data Encryption Key)密文与 DEK 明文对云产品加密所使用的密钥进行数据加密和解密。

图:信封加密流程图

此类加密方案被称为信封加密Envelope Encryption),即用另一个密钥对密钥进行加密。信封加密是一种应对海量数据的高性能加解密方案。其可通过生成 DEK 来对本地数据进行加解密,保证了业务加密性能的要求,同时也由** KMS 确保了数据密钥的随机性和安全性**。

所有的加密解密操作均由数据库在内存中进行,每一次数据库重启以及存在关闭内存的操作时,均会重新从 KMS 获取密钥材料。本地存储中不保存任何可用于解密的密钥材料。

目前PostgreSQL社区版本并不提供数据透明加密的功能,而腾讯云数据库PostgreSQL在内核中实现了透明加密的能力,并且通过密钥托管于用户的KMS服务中,进一步降低了数据被破解的风险,确保数据安全。

字段加密

数据加密是针对整体实例级别的加密功能,加密范围大,则覆盖范围广。虽然有部分业务也无需将整体实例进行加密,但需要重点针对一些特殊数据进行加密存储。腾讯云数据库PostgreSQL支持基于pgcrypto 插件针对字段进行加密的功能。

PostgreSQL中,pgcrypto是contrib下的一个插件,它提供了一些加密解密函数,可以实现服务器端的数据加密解密。用户可以在SQL语句中调用这些函数来完成数据的加密和解密。

在使用pgcrypto中的加密函数过程中,可以加密比较重要的字段,提高数据的安全性。

pgcrypto模块提供的加密函数有以下几类:通用Hash函数,Password Hash函数,PGP加密函数,Raw加密函数,随机数据函数。

整体来看,字段加密可以有效地防止重点敏感数据泄露,适用于密码、关键数据等加密场景。

数据脱敏

有些情况下,有些表的特定列含有敏感数据(如用户信息表中的用户手机号)。毫无疑问,只有指定用户才有权限看到这些敏感数据,其他用户则只能看到脱敏后的数据。如果此时采用数据列级加密,则需要客户端也介入进来进行实现,否则加密和解密实现比较繁琐。

为减少客户业务代码工作的参与,对于此类场景腾讯云数据库PostgreSQL支持客户直接在PostgreSQL中进行配置实现。

第一种方式:通过视图脱敏的方案进行操作,如通过查询语句,将指定字段进行字符串处理。代码如下:

hehe => SELECT id,name,SUBSTRING(phone_number, 1,3) ||'****'||SUBSTRING(phone_number, 7,4) as phone_number    FROM t;
 id |   name   | phone_number 
----+----------+--------------
  1 | zhangsan | 180****2321
  1 | lisi     | 136****2321
  1 |          | 177****2423
  1 | wangwu   | 177****2423
(4 rows)

第二种方式:通过postgresql_anonymizer插件能力实现,实现对数据脱敏的需求。


RLS*(ROW Level Security) *是PostgreSQL 9.5版本之后的新增特性,提供了基于行的安全策略,限制数据库用户的查看表数据权限。在其他数据库中,对用户的权限管控均在表级别,例如:限制某个用户只能查询某个表。而采用RLS后,不同的用户访问一个表可以看到不同的数据。

默认情况下,表没有任何安全策略限制。这样用户根据 SQL 特权系统具有对表的访问特权,对于查询或更新来说其中所有的行都是平等的。当在一个表上启用行安全性时,所有对该表选择行或者修改行的普通访问都必须被一条行安全性策略所允许(不过,表的拥有者通常不服从行安全性策略。如果表上不存在安全策略,如果没有配置安全策略,所有的数据查询和更新都会禁止,但是对全表进行操作的命令,比如 TRUNCATE 和 REFERENCES 不受影响。

行安全性策略可以针对特定的命令、角色或者两者。一条策略可以被指定为适用于ALL命令,或者查询(SELECT)、 插入(INSERT)、更新(UPDATE)或者删除(DELETE)。同一个策略可分配多个角色,并且通常的角色成员关系和继承规则也适用。

行级安全策略可适用于在针对多个数据混合存储于同一张表内,又需要根据用户类型进行查看或者读写权限进行分类限制的场景。腾讯云数据库PostgreSQL通过行级安全策略则可以有效避免数据被意外篡改和操作,最大程度上保护数据安全。

二、实例安全

安全组访问策略

安全组是一种有状态的包含过滤功能的虚拟防火墙,用于设置单台或多台云数据库的网络访问控制,是腾讯云数据库提供的重要网络安全隔离手段。安全组是一个逻辑上的分组,客户可以将同一地域内具有相同网络安全隔离需求的云数据库实例加到同一个安全组内。

安全组访问策略可以有效的控制访问数据库的来源IP地址,设置黑白名单,允许指定的网络段、IP地址访问,拒绝风险地址的访问。

角色权限访问控制

在大企业中,数据库资源面向不同的业务提供服务,而不同的业务隶属于不同的小组或者部门,此时如何在统一的账号下管理不同的业务资源就成为了安全权限管理的一大难题。

腾讯云数据库PostgreSQL访问管理 CAM 则可以用于帮助客户安全管理腾讯云账户下资源的访问权限。通过 CAM,客户可以创建、管理和销毁用户(组),并通过身份管理和策略管理控制指定用户可以使用的腾讯云资源,进而达到权限分离的目的。这种权限管理方式是典型的PBAC(基于策略的访问控制),可以实现资源级粒度的控制

客户可以通过子帐号实现不同的账号管理不同的服务来规避以上的问题。默认情况下,子帐号没有使用云服务的权利或者相关资源的权限。因此,腾讯云数据库PostgreSQL支持创建策略来允许子帐号使用他们所需要的资源或权限。针对某一个用户、某一个资源、某一个操作均可以做到精细化的控制。进而避免越权操作,让所有的用户仅可操作自己权限范围内的资源。

网络隔离

云数据库 PostgreSQL 支持使用私有网络来实现更高程度的网络隔离控制,搭配使用安全组和私有网络将极大提升访问 PostgreSQL实例的安全性。

私有网络是用户在腾讯云上建立的一块逻辑隔离的网络空间。在私有网络内,用户可以自由定义网段划分、IP 地址和路由策略,进而实现资源级的网络隔离

部署在私有网络中的 PostgreSQL实例默认只能被同一个私有网络中的 CVM 访问,若 CVM 与 PostgreSQL实例不在同一个私有网络,也可以通过申请外网的方式进行访问,考虑到网络安全的问题,不建议采用外网的方式进行数据库访问,若必须采用外网访问 PostgreSQL实例,请配合安全组来实现客户端的访问控制。

VPC的网络基础设施还可以防止DDoS攻击。当用户使用外网连接和访问 PostgreSQL实例时,可能会遭受 DDoS 攻击。针对这一问题,腾讯云数据库提供流量清洗和封堵处理功能,完全由系统自动触发和结束。当腾讯云数据库安全系统认为用户实例正在遭受 DDoS 攻击时,首先会启动流量清洗功能,如果流量清洗无法抵御攻击或者攻击达到封堵阈值,则会进行封堵处理。

实例删除防呆

“删库跑路” 是在数据库行业中经常被人拿出来调侃的一句话,其核心原因就是在于传统数据库的管理手段单一,很容易出现运维人员对实例进行删除,导致实际业务受到巨大损失。

云上数据库支持实例回收站能力,当用户出现了实例删除,并不会直接将数据完全清理,而是会在回收站呆上几天。这样避免了误操作或者恶意操作导致的实例无法回收情况。当实例进入回收站后,业务出现异常无法访问,则可帮助客户及时发现问题,进而抓紧时间挽救。

同时腾讯云数据库结合云安全访问策略,使实例的隔离与下线接口掌握在不同权限的负责人手中。这样做可对高危操作进行管理隔离,避免单一人员风险导致的数据库安全问题。

除了通过访问控制策略之外,腾讯云数据库还可以基于商业流程服务BPaaS 与云函数SCF的结合形式,在云上实现审批流服务,使高危操作都受到审批流的管理

整体来看,以上数据库实例安全的防呆措施,可避免95%以上的实例意外风险,充分保障数据库的稳定运行。

总结

数据库安全能力提升任重道远,如何确保数据库在正常对外提供服务的同时,不断提高安全防护能力也是腾讯云数据库一直以来在创新突破的目标。

如今,腾讯云数据库丰富的安全策略组合,可帮助客户有效降低在数据库安全方面的投入成本,使得客户轻松享用一系列安全能力。

有关选择:成本和安全?我都要!的更多相关文章

  1. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  3. ruby - Rails 3 的 RGB 颜色选择器 - 2

    状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

  4. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  5. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  6. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  7. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

    我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

  8. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

  9. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  10. ruby-on-rails - ActiveAdmin 自定义选择过滤器下拉名称 - 2

    对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking

随机推荐