专栏名称: 运维帮
互联网技术分享平台,分享的力量。帮主一直坚信技术可以改变世界,从毕业到现在干了15年运维,有许多话要和你说。
目录
相关文章推荐
51好读  ›  专栏  ›  运维帮

黑客勒索盯上 MySQL 数据库,老司机教你怎么防

运维帮  · 公众号  · 运维  · 2017-03-02 14:08

正文

请到「今天看啥」查看全文


1. 数据传输加密

如果你的网络是不可靠的,请使用加密传输,例如OPENSSL。

参考, http://blog.163.com/digoal@126/blog/static/163877040201342233131835

2. 认证过程加密

认证过程加密,指认证过程中,网络上传输的密码安全,如果使用数据库认证,请使用MD5方法(配置pg_hba.conf)。确保网络中传输的是随机码和MD5加密后的MD5。

但是请注意,MD5也不能泄露,泄露是危险的,可以参考以下文档使用MD5进行认证

《PostgreSQL 对比 MySQL - 秘钥认证》

三、数据安全

你的数据安全吗?如果你存储的敏感数据在数据库中是明文的,一旦数据库暴露,用户数据可能泄露,如何尽可能的保证泄露的数据的安全呢?

1. 字段存储加密

将敏感数据加密后存储在数据库中,即使加密数据泄露,只要加解密方法没有泄露,也是相对安全的。

加解密方法建议放在应用端实现,如果加解密在数据库端实现,用户一旦入侵数据库,更容易破解。(或者加密在数据库端实现,解密在应用程序端实现)

http://blog.163.com/digoal@126/blog/static/1638770402013423101455507/

2. 敏感数据,跟踪并记录DML,truncate操作的undo

对于非常敏感的数据,我们应该记录对这些数据操作的UNDO,在必要时刻可以快速的回滚到误操作前。

这种方法主要是对付SQL注入,人为误操作(包括delete,update,insert,truncate的回滚)。

请参考, http://blog.163.com/digoal@126/blog/static/1638770402014728105442434/

3. 函数代码加密

如果我们将业务逻辑放在数据库函数中处理的话,肯定不想让用户看到函数的内容。

对于先编译后执行的函数,例如C函数,是不需要加密的,但是,对于解释性语言函数如plpgsql,建议加密函数的内容。

目前enterprisedb有这个特性,社区版本的PostgreSQL没有这个特性。

请参考, http://blog.163.com/digoal@126/blog/static/163877040201256056352

http://www.cybertec.at/en/products/plpgsql_sec-encrypt-your-stored-procedure-codes/

如果不能加密,至少需要控制普通用户不能查看函数内容。

http://blog.163.com/digoal@126/blog/static/16387704020151993632304/

4. 使用recycle bin插件,用户在删对象时,对象会存储在recycle bin schema下,而不会被真实删除。那么表被误删除或恶意删除后,很容易找回。(使用钩子实现)

请参考, http://blog.163.com/digoal@126/blog/static/1638770402014339374747

5. 透明加密,防止数据文件被拖走后,泄露数据。

手段包括类型透明加密(TDE),文件透明加密(FDE)

参考

《PostgreSQL 透明加密(TDE,FDE) - 块级加密》

四、权限控制

1. 权限管理

最危险的就是最容易暴露的数据库用户,当然是应用连接数据库的账号(以下简称应用账号)。

应用账号权限越大,应用程序被攻击后破坏性就越大。

例如用户有删数据库,删表,删索引,删表空间,删SCHEMA,删函数等等这样的权限的话,危害极大。

安全建议:

1.1 使用超级用户创建数据库,SCHEMA,应用所需的对象(如表,索引,函数)。

1.2 创建应用账号角色。

1.3 回收数据库,schema,language,应用对象的public权限。

    revoke all on database dbname from public; 
    revoke all on schema sch_name from public; 
    revoke all on language plpgsql from public; 
    revoke all on table ... from public;
    revoke all on function ... from public;
    ......

1.4 将数据库,schema的使用权限赋予给应用账号。







请到「今天看啥」查看全文