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语句返回值 ...
随机推荐
- C++指针学习笔记
本文参考http://www.prglab.com/cms/pages/c-tutorial/advanced-data/pointers.php 1.存储其它变量地址的变量(如下面例子中的addre ...
- .net日志专用
一个简单的.net写日志方法 - 可能的改进点 昨天有个朋友在评论的时候问我如下代码在web开发中有什么问题 public void Log(string msg) { System.IO.File. ...
- MySQL的环境变量
MySQL的环境变量 服务器变量:调整MySQL的工作属性,由MySQL的配置文件决定 状态变量:MySQL运行以后所输出的自身统计信息 在Linux下查看MySQL的环境变量 1.获取MySQL客户 ...
- C++11中新特性之:initializer_list详解
C++11提供的新类型,定义在<initializer_list>头文件中. template< class T > class initializer_list; 先说它的用 ...
- void void*
void类型及void指针 1.概述 许多初学者对C/C 语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并 详述void及void指 ...
- .net ajax式上传文件
今天在这里介绍一下ajax上传文件.其实也不算是真的使用xmlhttprequest上传,只是使用了iframe实现了无刷新上传而已,最多也只算 是仿ajax上传文件.然而网上关于使用xmlhttpr ...
- PHP PhantomJs中文文档(翻译)
介绍 PHP PhantomJS 是一个灵活的 PHP 库加载页面通过 PhantomJS 无头浏览器并将返回页面响应.这是方便于需要JavaScript的支持,同时还支持截屏测试网站.功能列表通过 ...
- Activity的测量(Measure)、布局(Layout)和绘制(Draw)过程分析
一个Android应用程序窗口里面包含了很多UI元素,这些UI元素是以树形结构来组织的,即它们存在着父子关系,其中,子UI元素位于父UI元素里面,因此,在绘制一个Android应用程序窗口的UI之前, ...
- 参数TFilterPredicate 类型说明
类型名称:TFilterPredicate 类型定义: type TFilterPredicate = reference to function(const Path: string, const ...
- Python小杂点
1.函数调用 a = [] def fun(a): a.append(1) print (a) 这个时候输出的结果为[],如果想要出现1,需要先运行函数fun,然后在输出a 2.python方法 de ...