数据库安全
《数据库管理系统》读书笔记
总览
根据数据库保护力度,可将数据库安全分为三层:
- 外围级防御;
- 访问级防御;
- 数据级防御。
安全威胁
来源
- 内部威胁,即主要原因来源于数据库管理者和数据库开发者:
- 人为疏忽,团队里有菜b,一般都是这种问题;
- 权限管理不当;
- 数据库软件漏洞;
- 社会工程学攻击,不攻击软件本身,但是操纵个人来访问系统/数据;
- 监守自盗;
- 外部威胁:
- 注入攻击,通过SQL语句注入攻击查询语义等手段;
- 缓冲区溢出攻击,进程试图写数据到内存时,超过内存块的最大容量就会发生缓冲区溢出,攻击者可使得系统崩溃或者窃取数据库中的数据;
- 拒绝服务攻击(DoS)/分布式拒绝服务攻击(DDoS);
- 恶意软件,专门利用软件漏洞。
安全需求
数据库安全主要包括两方面:
- 数据库管理系统安全,保证系统安全稳定运行,正常提供服务;
- 数据安全,保证数据不会泄露,篡改和丢失。
数据库安全其实与后台服务安全其实很类似,两者需要考虑的点基本重合,但存在不同侧重点。
外围级数据库安全措施
外围级的数据库安全措施主要包括:安全认证、防护墙和入侵检测。
安全认证
安全认证指的是试图登录数据库的用户是否被授权访问该数据库。安全认证方式包括:
- 由数据库本身执行认证(数据库认证):
- 使用密码,需要管理密码的复杂性,过期时间,重用规则,重试次数等;
- 使用操作系统或者其他外部方法验证用户(外部身份认证):
- 强身份认证:
- 使用外部协议(比如Kerberos)或者令牌卡,智能卡,公钥设施进行身份认证;
- 代理认证:
- 单点登录(SSO)。
- 强身份认证:
复杂网络环境中,如果每次连接数据库都需要进行数据库认证,会带来极大不便以及数据库的额外开销。因此需要数据库的代理服务。
防火墙
防火墙是一种web引用,用于控制和审核访问数据库的流量,保护数据库管理系统免受复杂网络环境的攻击。还可以通过维护日志来监视和审计对数据库的所有访问。
防火墙有两种部署方式:
- 保护单个数据库服务器时,与数据库部署在同一台服务器上,对数据库访问的流量必须先经过防火墙,才能进入数据库;
- 保护多个服务器的多个数据库时,数据库防火墙部署在靠近网关的服务器上。
防火墙原理:防火墙包括一组预定义的、可定制的安全审计策略,其根据过去事件以及威胁命名空间(“签名”,作为识别特征)来识别数据库攻击。
防火墙可以识别和阻止SQL注入攻击和缓冲区溢出攻击。
入侵检测
入侵检测监控网络流量,发现可以流量时可以发出警报或者采取自动反应措施(跟防火墙比较像,但是防火墙侧重检测流量,入侵检测侧重检查行为)。主要包括两个方面:
- 异常检测系统:检查用户行为是否异常;
- 异常响应系统:检查到异常行为时自动做出处理,如冻结用户权限等。
访问级数据库安全措施
访问级的数据库安全措施主要包括访问控制、安全配置策略和数据库审计。
访问控制
访问控制主要包括两个方面:安全认证和权限控制。上文中已经介绍了安全认证,这里主要介绍权限控制。
数据库命名空间:关系数据库的部分或者全部逻辑配置,表示特定用户的对象组,指示构成数据库的实体如何关联。命名空间为访问控制和多租户提供支持,某个用户只有访问某个命名空间的权限(访问控制),或者某个租户只能查看某个命名空间上的信息。
访问控制策略指定访问权限,该权限规定了允许或者拒绝用户提出的访问请求。下文中,用客体指代数据库中的数据或资源,主体表示用户发出SQL命令的引用程序。访问控制中主要关注以下问题:
- 阻止访问;
- 确定访问权限;
- 授予访问权限;
- 撤销访问权限;
- 检查访问权限。
访问权限模型有四种:
- 自主访问控制(discretionary access control, DAS);
- 强制访问控制(mandatory access conrol, MAC);
- 基于角色的访问控制(role-based access control, RBAC);
- 基于属性的访问控制(attribute-based access control, ABAC)。
1&2已经过时,3为当下主流选择,4是最新的模型。
自主访问控制
自主访问控制的基本模型是主体试图访问客体,数据所有者决定哪些用户可以访问该数据。其中客体由称为参考监视器的保护装置保护,参考监视器必须检查数据库中每个访问数据的SQL请求。
访问控制矩阵每行是一个主体,每列是一个客体,每一项表示主体访问客体的权限。按行或者按列存储:
- 按列存储称为访问控制列表(access control list, ACL),很容易审计同一个客体可以被哪些主体访问,但很难审计一个主体可以访问哪些客体;
- 按行存储称为权限列表或功能列表,很容易审计同一个主体可以访问哪些客体,但很难审计一个客体可以被哪些主体访问。
强制访问控制
强制访问控制中,权限并非由数据拥有者决定和分配,用户根据许可信息获得访问权限。
每个主体/客体都具有一个敏感度等级和关键词集合。
- 主体只能读小于等于自己敏感度等级,且自己包含其所有关键词的客体;该规则保证主体不能访问其无权访问的客体;
- 主体只能写敏感度大于等于自己,且包含自己所有关键词的客体;该规则保证主体不会修改另一个敏感度低的客体而导致信息泄露。
基于角色的访问控制
MySQL/Doris的访问控制策略
基于角色的访问控制主要基于“最小控制”、“权限分离”的安全原则。基于角色的访问控制由五部分组成:
- 用户集合;
- 权限集合;
- 角色集合;
- 用户-角色映射,包含用户-角色的多对多映射;
- 角色-权限映射,包含角色-权限的多对多映射。
在数据库中设计和管理对应五张表,即可实现基于角色的访问控制机制。一般创建和分配角色由数据库管理员(账号)执行。
基于属性的访问控制
为了更细粒度地对用户权限进行控制,降低数据库安全风险,可以使用基于属性的访问控制。这是一种可区分的逻辑访问控制模型,通过对实体(主/客体)操作的属性和请求相关的环境评估规则来控制对客体的访问。最基本的形式中,基于属性的访问控制依赖于对主体属性、客体属性和环境条件的评估。
比如:可以设置某个资源的访问规则不允许员工在非工作时间访问。
基于属性的访问规则可以执行自主访问控制和强制访问控制模型。
安全配置策略
安全配置策略包括:
- 系统安全配置策略;
- 数据安全配置策略;
- 用户安全配置策略;
- 不同身份的用户配置不同的权限;
- 密码管理策略;
- 密码要求,密码时效等;
- 审计策略;
- 是否开启审计,审计详细程度等。
数据库审计
数据库审计核心思想是了解谁在何时访问了哪些数据,以及进行了哪些操作。
数据级数据库安全措施
如果数据泄露已经发生,会发生严重的损失。因此需要从数据本身考虑设计安全措施。
数据加密
加密原理
数据加密指利用加密算法将数据库中的数据从可读状态转换为不可读的密文,数据泄露时,只有持有正确解密密钥的用户才能够读取。
密钥越长越难破解,安全性越高,但较长的密钥会导致两个问题:
- 数据加密和解密会花费更长的时间,降低数据吞吐量和性能;
- 数据加密会导致一定的空间膨胀。
加密维度
数据库加密分为三个阶段:
- 存储加密:对存储在存储介质上的数据进行加密,可以很好地减少数据在静态存储状态下泄露地风险;
- 会导致写放大(空间膨胀);
- 会影响检索效率;
- 计算加密:指密态数据库在加密状态下进行检索和计算;该技术保证数据在计算态下的安全,即使攻击者读取内存也无法窃取数据明文;
- 传输加密:传输过程中加密,防止攻击者通过窃听信道来收集和窃取传输的数据。
加密粒度
数据库一般存在四种加密粒度:
- 数据项加密:每个数据项都有独立的密钥来进行加密,对性能影响很大;
- 列(行)加密:大部分数据库的选择,按列(行)加密;
- 表空间级加密:每个数据表有自己的密钥,对性能影响较小;
- 文件级加密:对数据文件加密,对性能影响最小。
加密粒度越细,密钥泄露影响的数据越少,安全性越高,但是对数据库性能的影响也越大。
加密算法
加密算法分为
- 对称加密:又称为私钥密码技术或者秘密密钥技术,要求发送方和接收方有一个相同的密钥;典型的对称加密算法包括:
- DES(data encryption standard, 数据加密标准);
- AES(advanced encryption standard,高级加密标准);
- RC4(Rivest cipher 4).
- 非对称加密:加密/解密过程使用两个密钥,一个公钥一个私钥,两者在数学上是相关联的。典型的非对称加密算法包括:
- RSA;
- PKCS.
常用加密算法:
- AES:一般为128/192/256位长的密钥,被认为是非常安全的;
- 3DES:使用3个56位的密钥对数据进行三次加密,从而产生一个168位的密钥。此算法非常安全,但是速度较慢;
- RSA:使用最广泛的非对称加密算法,密钥大小在1024~2048位之间,更安全但需要更多计算。明显慢于其他算法。
加密方式
有数据库中哪个组件来实现数据的加密和解密过程,对安全性有着很大影响。常见的加密实现:
- 应用程序接口加密(数据库外部);
- 插件方法,需要在数据库管理系统上安装模块或者插件包,通常使用列级加密(比如UDF);
- TDE(透明数据加密)。数据库引擎本身执行加密和解密,无需对应用程序代码进行修改。
透明数据加密
透明数据加密通常指对阵个数据库(包括备份)进行加密,是一种专门对表和表空间中静态数据加密的方法,对用户透明(即对使用数据的用户和应用程序不可见)。透明数据加密无法应对监守自盗的威胁。
全程加密
为了解决透明加密无法解决监守自盗的威胁的问题,全程加密技术允许客户端加密客户端内的数据,且永远不会向数据库和第三方服务器泄露加密密钥。客户端在此技术中需要:
- 加密/解密数据;
- 自动重写查询以保留应用程序的语义。
如果需要使用加密后的密文进行等值、求和等数据查询操作,则需要同态加密算法,其允许加密数据进行运算,且得到的结果与明文数据运算后加密的结果相同,但:
- 同态算法效率不够实用;
- 目前没有既支持算数运算符又支持关系运算符的同态算法(不完备)。
新一代密态数据库中还往往采用多层密钥管理系统,典型的三层包括列密钥、客户端密钥和设备密钥。
密态数据还导致数据库无法使用原有的索引技术来加速检索和计算,需要设计新的索引方案。但新的索引方案对查询优化的支持较差。
隐私保护
数据隐私问题通常围绕是否或如何与第三方共享数据,以及如何合法收集或存储数据这两个问题。
具体来说,数据库隐私主要考虑三个问题:
- 数据库本身的安全性(参考上一节);
- 存储在数据库中数据的法律和道德影响;
- 数据库安全专业人员为保护数据库中的数据而承担的内在道德责任。
数据脱敏
todo
差分隐私
todo