Cryptdb是MIT的开源数据库加密层,其实现了数据加密操作,代码在Ubuntu12.04上进行过测试. 但是12.04对于现在来说太老了,在Ubuntu16.04系统上直接使用脚本安装会出现各种问题,网上现有的参考资料也比较少. 本文基于对其安装脚本的分析,给出了Ubuntu16.04上安装的分解步骤.该方法在Ubuntu16.04上测试通过.

前期准备

Cryptdb的安装主要可以分为安装MysqL与相关软件,安装MysqL-Proxy,以及编译安装Cryptdb三个部分.前期需要安装一些依赖的软件,其具体步骤如下:

  • 下载源码
git clone -b public git://g.csail.mit.edu/cryptdb

下载以后,得到一个cryptdb.tar.gz文件,解压可以获得一个Cryptdb文件夹,进入该文件夹.为了方便说明,我们定义该文件夹路径是$CRYPTDB_HOME.

  • 下载必要的依赖软件
sudo apt-get install gawk liblua5.1-0-dev libntl-dev \
libMysqLclient-dev libssl-dev libbsd-dev libevent-dev \
libglib2.0-dev libgmp-dev MysqL-server libaio-dev \
automake gtk-doc-tools flex cmake libncurses5-dev make\
ruby lua5.1 libMysqLd-dev
(文末给出脚本链接,也可以参考其安装脚本)

上面的过程会安装MysqL,需要设置root用户的密码,为了方便在这里设置密码为letmein.
由于Cryptdb的语法解析依赖bison2.7,而默认安装的不是2.7版本,所以需要手动安装bison2.7,文末的连接给出了手动bison2.7的安装包.

此外,还需要安装g++4.7版本.

sudo apt install g++-4.7
  • 安装MysqL-Proxy

脚本中采用了直接编译源码的方式来安装MysqL-Proxy,这样会比较麻烦,在Ubuntu16.04条件下出现很多的问题,所以可以直接使用编译好的版本.

  1. 在官网下载MysqL-proxy0.8.5.
  2. 进入$CRYPTDB_HOME\/bins\/proxy-bin目录,并解压,可以看到bin,lib,include,libexc,share,licenses文件夹
  3. 设置环境变量

通过这样简单的三步操作,就完成了MysqL-proxy的安装.

编译MysqL与Cryptdb

  • 配置MysqL

再次进入Cryptdb目录,使用tar -zxf bins\/MysqL-src.tar.gz 命令解压MysqL源码.并且进入MysqL-src目录,进行如下操作.

mkdir build
cd build
export CXX=g++-4.7
cmake -DWITH_EMbedDED_SERVER=on -DENABLE_DTRACE=off ..
make
  • 添加配置文件

在Cryptdb目录下的conf目录中,创建一个新文件config.mk,文件内容示例如下:

MYSRC := /home/shaoyiwen/cryptdb/MysqL-src
MYBUILD := $(MYSRC)/build
RPATH := 1
CXX := g++-4.7
MysqL_PLUGIN_DIR := /usr/lib/MysqL/plugin

其中MYSRC变量的值根据自己的实际配置环境进行修改.

  • 编译Cryptdb
make clean
make
sudo make install

到此,Cryptdb编译就完成了,最后在.bashrc中田间EDBDIR变量,并设置权限,就完成了所有的安装工作.

export EDBDIR=$CRYPTDB_HOME
chown -R 用户名  $CRYPTDB_HOME
  • 启动Cryptdb

要启动Cryptdb,首先需要写一个简单的配置文件MysqL-proxy.cnf:

[MysqL-proxy]
plugins = proxy
event-threads = 4
proxy-lua-script = /home/shaoyiwen/Desktop/cryptdb/MysqLproxy/wrapper.lua
proxy-address = 192.168.124.138:3307
proxy-backend-addresses = localhost:3306

其中wrapper.lua的路径根据自己机器的机器配置修改. 并且赋予MysqL-proxy.cnf 0600权限.

chmod 0660 MysqL-proxy.cnf

然后就可以使用如下命令启动MysqL-Proxy,并且在MysqL客户端使用3307端口接入数据库了.

MysqL-proxy --defaults-file=./MysqL-proxy

总结

Cryptdb基于MysqL-Proxy来实现,通过wrapper.lua脚本,截获客户端发送的sql语句请求,进行数据加解密的处理. 在MysqL-Proxy端,需要安装Cryptdb的动态链接库来完成这些操作,在MysqL服务器端,则是使用了MysqL的UDF功能,进行加密层次的调整. 了解了这种结构,就可以手动安装,并在各个小的步骤出现问题的时候,采用对应的方法进行解决.

原始链接:yiwenshao.github.io/2016/11/12/Cryptdb在Ubuntu16-04上的安装/

文章作者:Yiwen Shao

许可协议: Attribution-NonCommercial 4.0

转载请保留以上信息,谢谢!

Cryptdb在Ubuntu16.04上的安装的更多相关文章

  1. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  2. Android – 将SQLite与MySQL同步的最佳方式

    参见英文答案>Synchronizingclient-serverdatabases5个我正在开发一个包含网络应用和移动应用程序的项目,该应用程序记录每日用户的数据.用户可以删除,更新他们的数据,他们可以使用许多设备插入数据.我打算这样开发:用户输入他们的数据然后插入sqlite.服务将定期启动(每5小时或每小时)以使用时间戳与MysqL同步.我确实在互联网上使用服务和时间戳搜索了一个样本,但我一

  3. android – 如何将唯一的GCM注册标识存储到MySQL中

    我正在设置GoogleCloudMessaging机制的服务器端,使用MySQL存储移动应用提供的注册ID.Google可以发出最多4k个注册码,我被迫将其存储在TEXT字段中.所有的好,到目前为止,问题是我必须处理这样的情况:>用户登录到应用程序>该应用从google请求注册ID>应用程序将新的注册ID发送到应用服务器>服务器存储该注册ID并将其链接到当前登录的用户>该用户注销并且新用户登录>应

  4. nodeJs链接Mysql做增删改查的简单操作

    本篇文章主要介绍了nodeJs链接Mysql做增删改查的简单操作,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. PHP连接MYSQL数据库的3种常用方法

    这篇文章主要介绍了PHP连接MYSQL数据库的3种常用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  6. PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例

    这篇文章主要介绍了PHP使用PDO创建MySQL数据库、表及插入多条数据操作,结合实例形式总结分析了php基于pdo的mysql数据库创建、数据表创建以及多条数据插入操作相关实现技巧,需要的朋友可以参考下

  7. MybatisPlus如何处理Mysql的json类型

    这篇文章主要介绍了MybatisPlus如何处理Mysql的json类型,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  8. 基于PHP+mysql实现新闻发布系统的开发

    这篇文章主要介绍了基于PHP+mysql实现新闻发布系统的开发,文章通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. nodejs操作mysql实现增删改查的实例

    下面小编就为大家带来一篇nodejs操作mysql实现增删改查的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. NodeJs使用Mysql模块实现事务处理实例

    本篇文章主要介绍了NodeJs使用Mysql模块实现事务处理 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. crontab发送一个月份的电子邮件

    ubuntu14.04邮件服务器:Postfixroot收到来自crontab的十几封电子邮件.这些邮件包含PHP警告.>我已经解决了这些警告的原因.>我已修复每个cronjobs不发送电子邮件(输出发送到>/dev/null2>&1)>我删除了之前的所有电子邮件/var/mail/root/var/spool/mail/root但我仍然每小时收到十几封电子邮件.这些电子邮件来自cronjobs,

  2. 模拟两个ubuntu服务器计算机之间的慢速连接

    我想模拟以下场景:假设我有4台ubuntu服务器机器A,B,C和D.我想在机器A和机器C之间减少20%的网络带宽,在A和B之间减少10%.使用网络模拟/限制工具来做到这一点?

  3. ubuntu-12.04 – 如何在ubuntu 12.04中卸载从源安装的redis?

    我从源代码在Ubuntu12.04上安装了redis-server.但在某些时候它无法完全安装,最后一次makeinstallcmd失败.然后我刚刚通过apt包安装.现在我很困惑哪个安装正在运行哪个conf文件?实际上我想卸载/删除通过源安装的所有内容,只是想安装一个包.转到源代码树并尝试以下命令:如果这不起作用,您可以列出软件自行安装所需的步骤:

  4. ubuntu – “apt-get source”无法找到包但“apt-get install”和“apt-get cache”可以找到它

    我正在尝试下载软件包的源代码,但是当我运行时它无法找到.但是当我运行apt-cache搜索squid3时,它会找到它.它也适用于apt-getinstallsquid3.我使用的是Ubuntu11.04服务器,这是我的/etc/apt/sources.list我已经多次更新了.我尝试了很多不同的debs,并没有发现任何其他地方的错误.这里的问题是你的二进制包(deb)与你的源包(deb-src)不

  5. ubuntu – 有没有办法检测nginx何时完成正常关闭?

    &&touchrestarted),因为即使Nginx没有完成其关闭,touch命令也会立即执行.有没有好办法呢?这样的事情怎么样?因此,pgrep将查找任何Nginx进程,而while循环将让它坐在那里直到它们全部消失.你可以改变一些有用的东西,比如睡1;/etc/init.d/Nginx停止,以便它会休眠一秒钟,然后尝试使用init.d脚本停止Nginx.你也可以在某处放置一个计数器,这样你就可以在需要太长时间时发出轰击信号.

  6. ubuntu – 如何将所有外发电子邮件从postfix重定向到单个地址进行测试

    我正在为基于Web的应用程序设置测试服务器,该应用程序发送一些电子邮件通知.有时候测试是使用真实的客户数据进行的,因此我需要保证服务器在我们测试时无法向真实客户发送电子邮件.我想要的是配置postfix,以便它接收任何外发电子邮件并将其重定向到一个电子邮件地址,而不是传递到真正的目的地.我正在运行ubuntu服务器9.10.先感谢您设置本地用户以接收所有被困邮件:你需要在main.cf中添加:然后

  7. ubuntu – vagrant无法连接到虚拟框

    当我使用基本的Vagrantfile,只配置了两条线:我看到我的虚拟框打开,但是我的流氓日志多次显示此行直到超时:然后,超时后的一段时间,虚拟框框终于要求我登录,但是太久了!所以我用流氓/流氓记录.然后在我的物理机器上,如果我“流氓ssh”.没有事情发生,直到:怎么了?

  8. ubuntu – Nginx – 转发HTTP AUTH – 用户?

    我和Nginx和Jenkins有些麻烦.我尝试使用Nginx作为Jenkins实例的反向代理,使用HTTP基本身份验证.它到目前为止工作,但我不知道如何传递带有AUTH用户名的标头?}尝试将此指令添加到您的位置块

  9. Debian / Ubuntu – 删除后如何恢复/ var / cache / apt结构?

    我在ubuntu服务器上的空间不足,所以我做了这个命令以节省空间但是现在在尝试使用apt时,我会收到以下错误:等等显然我删除了一些目录结构.有没有办法做apt-getrebuild-var-tree或类似的?

  10. 检查ubuntu上安装的rubygems版本?

    如何查看我的ubuntu盒子上安装的rubygems版本?只是一个想法,列出已安装的软件包和grep为ruby或宝石或其他:)dpkg–get-selections

返回
顶部