Linux下OpenERP7备份、恢复数据库将不再支持md5验证方式
-
转载自: http://cn.openerp.cn/openerp_postgresql_authentication/
OpenERP 使用的是PostgreSQL数据库,一般我们下载DEB包来安装或者按照官方的 http://doc.openerp.com/v6.1/install/linux/postgres/index.html ,linux下一般会通过一个叫OpenERP(当然也可以改成别的名字)的用户来运行OpenERP(这种连接数据库的方法就是peer认证)。在Windows下我们一般会通过数据库的用户名密码来连接数据库。
以前我们想运行多个OpenERP实例,例如5.0, 6.0, 7.0一般会通过修改每个实例对应的配置文件的数据库名和密码来实现。db_name = openerp<br />db_password = postgres
然后再修改pg_hba.conf ,把验证方式由peer改为md5。
注:一般db_port不需要设置,否则postgresql会使用ip地址来连接,导致peer失效
[quote]md5 :要求客户端提供一个 MD5 加密的口令进行认证
peer:从操作系统中获取用户名,并检查它是否符合要求的数据库用户名。这是只适用于本地连接。[/quote]#local all all peer
由peer认证改为md5local all all md5
这是以前的做法,但是随着7.0的到来,openerp对于数据库安全性的要求提高了,现在如果还是通过md5来验证数据库,将不能再在openerp web上备份/恢复数据。(目前只是linux版本,windows暂时没有影响)。因为7.0安装模块更容易,甚至可以在<a title="Apps" href="http://v6apps.openerp.com/" target="_blank">apps</a>上直接安装。
在代码里面体现为<br /> @contextlib.contextmanager<br /> def _set_pg_password_in_environment(self):<br /> """ On Win32, pg_dump (and pg_restore) require that<br /> :envvar:`PGPASSWORD` be set<br /><br /> This context management method handles setting<br /> :envvar:`PGPASSWORD` iif win32 and the envvar is not already<br /> set, and removing it afterwards.<br /> """<br /> if os.name != 'nt' or os.environ.get('PGPASSWORD'):<br /> yield<br /> else:<br /> os.environ['PGPASSWORD'] = tools.config['db_password']<br /> try:<br /> yield<br /> finally:<br /> del os.environ['PGPASSWORD']
这段代码与之前的区别在于现在在linux下将不再从配置文件里面读取密码。
建议大家还是通过peer认证来连接OpenERP。关于postgresql各种认证方式可以访问 http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html