Keepass 2.x 之 同步与触发器
同步
之前用的 Keepass 1.x, 要实现工作电脑和个人电脑上的数据库文件同步,使用的是第三方的网盘同步。但有个问题就是,个人不习惯设置同步网盘开机启动,所以有时候工作电脑上的改动还没有同步上传、个人电脑上又修改了数据库文件,这样就会产生冲突。之前也看到有第三方插件可以提供同步功能,不过没有去尝试使用过。
现在,Keepass 2.x 提供了对同步功能的原生支持,支持“与文件同步”或者“与 URL 同步”。其中,URL 同步测试支持 FTP 以及 HTTP/WebDAV 协议。

这里的同步方法有两种:
一种是我们通常使用的,数据库文件位于本地磁盘上,需要同步时选择菜单“文件->同步”,再选择需要同步的本地或 URL 文件。需要注意的是,第一次同步之前需要先将你的数据库文件复制到需要同步的位置,因为选择同步文件时需要指定待同步文件的完整路径,如:ftp://xxx.edu.cn/KeepassSync/MyBase.kdbx.
另外一种方式,则是直接打开 URL 数据库文件使用。

这样我们每次改动后,选择保存(注意不是另存为),都会自动将改动保存到打开的 URL 文件中。
以上就是同步的基本用法,基本是靠手动完成同步操作。如果想偷懒,让软件更加自动化的同步操作,则需要使用到 Keepass 2.x 的新功能:触发器。
触发器
触发器和同步功能一样,也是 Keepass 2.x 的新增功能,用它来辅助实现自动同步操作,简直就是绝配。
触发器位于“工具”菜单下,点击后弹出“触发器”窗口,这里有一个“启用触发系统”复选框,用来控制所有的触发器是否启用。然后点击“添加”按钮,出现“添加触发器”窗口。

在“属性”选项卡中,有三个复选框:
“启用”:控制当前触发器是否启用;
“启动时打开”:控制 Keepass 软件启动后该触发器是否打开,这个主要用于其他触发器来触发它的开关状态(后面会讲到)。只有之前说到的“启用触发系统”以及上面的“启用”复选框都选中,并且触发器打开时,该触发器才有效。
“执行动作后关闭”:容易理解,就是该触发器只执行一次,当然同样可以通过其他触发器再把它打开。
另外,需要注意的是,触发器是属于软件层面的,而不是数据库下的属性,即同步时不会同步触发器。
还有,在上面所说的“启动时打开”复选框,它下面说明是“触发器将在 Keepass 启动时打开”。这样,如果你同时选择了“执行动作后关闭”复选框,或者通过其他触发器将其关闭。则当你只关闭了数据库(注意 Keepass 软件没有关闭),然后重新打开数据库时,该触发器不会打开。不过这种情况很少遇到,一般我们使用都是只用一个数据库文件,关闭时也是直接退出软件。
在“事件”选项卡下,点击“添加”按钮,弹出“事件”添加窗口:

可以看到可供选择的触发事件很多,并且如果选择多个事件后,只要有一个事件发生,则该触发器就会被触发。
在“条件”选项卡下,同样点击“添加”按钮,弹出“条件”添加窗口:

其中可供选择的条件如下:

注意如果选择多个“条件”的话,只有当所有的条件都满足时,该触发器才会进行接下来指定的“动作”。
在“动作”选项卡下,点击“添加”按钮,弹出“动作”添加窗口:

可以选择的动作也很多:

如果选择多个动作,则这些动作会按先后顺序进行。动作顺序可以在“动作”选项卡中调整。
按照官方帮助中的说法,如果某个动作无法进行下去,则其下面的动作也不再进行。
Actions are performed consecutively; if one action fails, typically the execution of the event is aborted (i.e. all following actions aren't performed).
但实际操作发现,比如设定同步动作,一个同步到 URL 文件,一个同步到本地磁盘其他地方,并且同步到 URL 文件的动作在前。断网情况下,同步到 URL 文件动作会弹出错误提示,但同步到本地磁盘还能继续成功运行。
因此,个人理解是如果动作之间没有关联的话,即使前面的动作无法进行,也不影响后续动作。当然,这里还是建议把同步到本地磁盘这一动作放到前面,毕竟一般情况下它都不会出现问题的。
注意无限循环问题:
使用触发器时需要注意的一个问题就是,可能一个触发器会触发自身,这样程序就会陷入无限循环之中。比如,之前自己设计一个“保存后同步”的触发器,由于软件的同步机制相当于保存,因此就出现了无限循环问题。官方帮助页面有这方面的详细说明和解决办法,部分翻译如下:
解决思路:在触发器执行我们想要完成的动作之前先关闭自己,然后再执行指定的动作,执行完后再打开自身。
解决步骤:
1. 首先在“动作”窗口选择动作:“更改触发器 开/关 状态”

触发器名称留空,表示自身,新状态改为“关闭”。
2. 再自行添加自己需要的动作;
3. 同1,只是新状态改为“打开”。
示例
保存后同步
- “属性”选项卡,命名该触发器,如 SavedSync.(注意,后面动作选择“更改触发器 开/关 状态”时触发器名称只能手动输入,无法选择,所以这里命名还是从简,具体描述可以写到下面的注释栏。)同时勾选“启用”和“启动时打开”复选框。
- “事件”选项卡,添加事件,选择“已保存数据库文件”,下面的文件/URL - 比较和过滤器可以无视。不过如果有多个数据库文件需要同步,则可以根据待保存的数据库文件名设定后续同步动作。这里我的设置如下:

- “条件”选项卡不加入任何条件。你也可以选择同步到 URL 文件时选择条件“远程主机可以连接(ping)”,这样只有当 URL 文件可以访问时才同步。不过我倾向于不加入这个条件,这样即使后面无法完成同步操作,也会有弹窗提示,让我们能更清楚当前的同步状态。
- 最后“动作”选项卡就需要注意前面说到的无限循环问题了。
首先关闭当前触发器;
然后添加动作“与一个文件/URL 同步当前数据库”,在下面输入 “文件/URL” 地址,如果是 URL 文件,下面还要输入 IO 连接用户名和密码;
最后打开当前触发器。
打开数据库后同步
这个触发器的操作和上面的基本相同,不同点如下:
- “事件”选项卡中,添加的事件选择“已打开的数据库文件”。
- “动作”选项卡中,关闭和打开的触发器名称要写上面的“保存后同步”触发器名称。以为同步也是一种保存,这样就不会打开数据库同步后,又触发了保存同步。
官方帮助里还提供了更多的用法示例,可以前去看看:http://keepass.info/help/kb/trigger_examples.html.
WebDav 同步测试
由于学校里提供了个人的 FTP,因此我现在是将个人数据库同步到该 FTP 上。一般没有自己 FTP 的,就得找一些支持 FTP 或 WebDav 协议的网盘了。
为了测试该功能,在网上找到了一个支持 WebDav 协议的网盘:Box. 注册后通过地址 https://www.box.com/dav/ 就能访问到自己的网盘文件了。
不过测试虽然可用,但速度较慢,期间还造成 Keepass 软件未响应的情况,好在半分多钟后恢复并同步成功。而且由于是国外的网盘,不确保以后能否访问(写作此文时 Dropbox 主页已无法打开)。
所以,大家还是要慎重考虑同步的地方,毕竟这个数据库要是丢了可真是损失惨重。
Keepass 2.x 之 同步与触发器的更多相关文章
- Oracle 数据同步系列--触发器
现在随着项目集成的越来越深入,异构的数据多起来,数据同步的场景也用的多起来,我甚至在考虑是否忽悠用户上Oracle GoldenGate了,这样就可以不用考虑采用哪种同步方案了. 简单的介绍一下我们数 ...
- 两张table数据同步--使用触发器
数据同步, 如果每天同步一次的话可以使用SSIS,跑JOB等,可以同步不同的DB的数据: 实时的可以使用触发器,在同一个DB中(或者DB Link): USE [test] GO IF EXISTS( ...
- SQLSEVER 不同服务器下两个结构相似的表实现数据同步(触发器)
1.建立链接服务器 在ServerA 中创建指向ServerB的链接服务器,并做好账号映射.addlinkedserver存储过程创建一个链接服务器,参数详情参见官方文档. 第1个参数LNK_Serv ...
- 触发器(基本的SR触发器、同步触发器、D触发器)
一.能够存储1位二值信号的基本单元电路统称为触发器(Filp-Flop) 触发器是构成时序逻辑电路的基本逻辑部件.它有两个稳定状态:“0”和“1”.在不同的输入情况下,它可以被置0状态或1状态,当输入 ...
- Keepass 2.x 的一些新发现
近期将 Keepass 从 1.22 升级到了 2.24,经过一番折腾,发现有了很多新功能,也有一些之前被忽视的地方.再一次感叹这个软件的强大,向作者的无私奉献致敬! 其实,这个软件一直有 1.x 和 ...
- SQL基础(3)-索引/触发器/视图操作
本文只列出索引,触发器,视图的简单操作语句 1.索引 a.创建 create index idx_name on fdh_client_info(name); --普通索引(单列索引) create ...
- Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...
- JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)
MySQL到Redis数据复制方案 无论MySQL还是Redis,自身都带有数据同步的机制,像比较常用的 MySQL的Master/Slave模式 ,就是由Slave端分析Master的binlog来 ...
- oracle存储过程和存储函数&触发器
oracle存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程,存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值 ...
随机推荐
- Sql server 浅谈用户定义表类型
1.1 简介 SQL Server 中,用户定义表类型是指用户所定义的表示表结构定义的类型.您可以使用用户定义表类型为存储过程或函数声明表值参数,或者声明您要在批处理中或在存储过程或函数的主体中使用的 ...
- js实现小数点后保留N位并可以四舍五入——js对float数据的处理
曾经遇到的两次的问题,关于前台接受后台传过来的float数据,一显示就是老长的小数点后缀,很烦人,后来想着用js把其进行四舍五入处理下,经网上查找,一哥们的代码如下:(很好用,感谢下!) functi ...
- ubuntu 下的 ftp (gftp)
功能和 windows 下的 ftp 一样 gftp安装方法apt-get install gftp启动方法:gfpt
- ubuntu 下安装软件,卸载,查看已经安装的软件
参考网址:http://wiki.ubuntu.org.cn/UbuntuSkills 一般的安装程序用三种: .deb 和.rpm 这两种安装文件 .bundle 这是二进制的安装文件 而 tar. ...
- php返回json数据函数实例
本文实例讲述了php返回json数据函数的用法,分享给大家供大家参考.具体方法如下: json_encode()函数用法: ? 1 echo json_encode(array('a'=>'bb ...
- 解决 nginx 返回数据不完整的方法
通过PHP请求接口时发现接口的内容输出没有完整的返回整个数据,早上只修改了nginx api_metrics插件里的计算response大小的代码,观察日志发现一条: 2012/08/28 02:13 ...
- LayoutInflater的获取与使用
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
- 毕向东_Java基础视频教程第19天_IO流(06~10)
第19天-06-IO流(装饰设计模式) 装饰设计模式: 当想要对已有的对象进行功能增强时, 可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么这个自定义的类称为装饰类. 装饰类通常会通过 ...
- OC - 正则表达式 - RegexKitLite
正则表达式使用步骤: 1. 创建正则表达式对象, 设置约束条件; NSString *pattern = @"\\d{1,3}"; NSRegularExpression *reg ...
- Android入门教程之我见
真正的从安卓入门学习到实际工作也差不多一年时间了,也做了几个项目.在这期间经历了一开始学习Android的基本知识后仍旧无从下手,不知道如何开始开发一个app,到现在也开始学会注意Android架构的 ...