论文部分内容阅读
[摘 要]某单位要求采用数据库三层架构体系,即应用程序+pgpool-II+PostgreSQL,实现数据的集中采集与存储,并规定只能通过访问封装好的业务处理函数访问后台数据库,同时还要求只有被赋权的用户才有执行操作的权限。因此,要求我们在中间件pgpool-II中增加权限验证模块,过滤掉不合法的请求,限制非法用户占用数据库连接,并解析出合法用户请求连接的数据库。
[关键词]pgpool-II;权限验证
中图分类号:TP311.52 文献标识码:A 文章编号:1009-914X(2015)38-0394-01
0 引言
某单位要求采用数据库三层架构体系,即应用程序+pgpool-II+Postgre SQL,实现数据的集中采集与存储,并规定只能通过访问封装好的业务处理函数访问后台数据库,同时还要求只有被赋权的用户才有执行操作的权限。因此,要求我们在中间件pgpool-II中增加权限验证模块,过滤掉不合法的请求,限制非法用户占用数据库连接,并解析出合法用户请求连接的数据库。
用户对操作权限有以下需求:系统管理员负责对用户进行分组,授予用户权限,限制用户的可操作范围;所有普通用户只能对函数进行调用,不同用户所能操作的函数可以相同也可以不同;只有系统管理员可以修改用户的权限;权限定义为对数据库中函数的调用。
针对上述需求进行分析,提出了一种解决方案,即利用中间件pgpool-II中已有的权限验证功能进行改进开发,即在原有权限验证的基础上限制掉其他非法的请求。
1 权限验证模块流程图
用户通过身份验证后,成功建立与后台数据库的连接后,进入权限验证阶段,权限验证接收指向select类型的业务请求的指针,同时传入一个用于带回连接业务数据库所需相关信息的con_db类型指针connect_db。若指向业务请求的指针或connect_db为空,则返回的输出项取值为0.在对业务请求的语句进行解析后,得到请求的各部分信息。然后,利用公共的用户postgres建立一条systemdb数据库的连接,如果连接建立失败,返回输出项取值为0。
利用该连接查询systemDB中的systemdb表中查詢该函数处理的数据库名称,如果查询返回错误信息,则返回的输出项为0;如果查询返回的数据库名称为空,则返回的输出项取值为-3。接着从systemDB的system表中查询用于函数处理上述数据库的用户及密码,如果查询返回错误信息,则返回的输出项取值为0;如果查询得到的公共用户名称及密码为空,则返回输出项为-1。最后,利用公共的用户postgres建立一条到业务数据库在systemDB节点上的空连接,通过新建立的连接查询登录用户是否有使用该函数处理业务数据库的权限,如果查询没有结果返回,则返回输出项为0;如果返回为真,表名验证通过,返回的输出项取值为1;反之验证失败,返回的输出项取值为-2。
示例:输入的函数形如cw_fun(),通过cw可以解析得出数据库,通过用户与角色,角色与操作的对应关系,可以解析出用户是否有权限做该操作。操作流程如图1所示。
2 权限验证模块接口设计实现
2.1 数据结构
与权限验证相关的数据结构:
结构体con_db用来存放解析出来的数据库,对应的数据库用户,对应数据库用户的密码
typedef struct con_db
{
char *con_database;//要连接的数据库
char *database_user;//对应的数据库用户
char *db_key;//对应数据库用户的密码
}con_db;
2.2 函数接口
输入项为指向业务请求字符串的指针以及用于存放后面连接业务数据库所需信息的指针。其中:对于指向业务请求字符串的指针,输入的数据类型为char**,标示为operation;对于存放连接业务数据库所需信息的指针,输入的数据类型为con_db*,标示为connection_db。
输出项为对应的验证结果,类型int,范围为-3~1;输出项的各种取值分别对应的含义见表1。
权限验证函数接口:
con_db auth_operation(char *operation,char *user);
输入的参数为用户的业务请求操作和用户名。
返回con_db。
3 实验结果
根据上述方法进行设计和实现,最终测试结果如表2所示:
4 小结
本文基于客户端应用程序+pgpool-II+PostgreSQL三层架构,实现了面向特定需求的权限验证,过滤掉了非法用户越权操作数据库的可能,提高了数据库连接利用率。
参考文献
[1] 刘宏杰.PostgreSQL数据库及应用.新疆油田公司勘探开发研究院.
[2] 曾侃.基于开源数据库PostgreSQL的地理空间数据管理方法研究.
[3] 王萌,杨梁怀.PostgreSQL数据库在不同调节器中的能效比较.
[关键词]pgpool-II;权限验证
中图分类号:TP311.52 文献标识码:A 文章编号:1009-914X(2015)38-0394-01
0 引言
某单位要求采用数据库三层架构体系,即应用程序+pgpool-II+Postgre SQL,实现数据的集中采集与存储,并规定只能通过访问封装好的业务处理函数访问后台数据库,同时还要求只有被赋权的用户才有执行操作的权限。因此,要求我们在中间件pgpool-II中增加权限验证模块,过滤掉不合法的请求,限制非法用户占用数据库连接,并解析出合法用户请求连接的数据库。
用户对操作权限有以下需求:系统管理员负责对用户进行分组,授予用户权限,限制用户的可操作范围;所有普通用户只能对函数进行调用,不同用户所能操作的函数可以相同也可以不同;只有系统管理员可以修改用户的权限;权限定义为对数据库中函数的调用。
针对上述需求进行分析,提出了一种解决方案,即利用中间件pgpool-II中已有的权限验证功能进行改进开发,即在原有权限验证的基础上限制掉其他非法的请求。
1 权限验证模块流程图
用户通过身份验证后,成功建立与后台数据库的连接后,进入权限验证阶段,权限验证接收指向select类型的业务请求的指针,同时传入一个用于带回连接业务数据库所需相关信息的con_db类型指针connect_db。若指向业务请求的指针或connect_db为空,则返回的输出项取值为0.在对业务请求的语句进行解析后,得到请求的各部分信息。然后,利用公共的用户postgres建立一条systemdb数据库的连接,如果连接建立失败,返回输出项取值为0。
利用该连接查询systemDB中的systemdb表中查詢该函数处理的数据库名称,如果查询返回错误信息,则返回的输出项为0;如果查询返回的数据库名称为空,则返回的输出项取值为-3。接着从systemDB的system表中查询用于函数处理上述数据库的用户及密码,如果查询返回错误信息,则返回的输出项取值为0;如果查询得到的公共用户名称及密码为空,则返回输出项为-1。最后,利用公共的用户postgres建立一条到业务数据库在systemDB节点上的空连接,通过新建立的连接查询登录用户是否有使用该函数处理业务数据库的权限,如果查询没有结果返回,则返回输出项为0;如果返回为真,表名验证通过,返回的输出项取值为1;反之验证失败,返回的输出项取值为-2。
示例:输入的函数形如cw_fun(),通过cw可以解析得出数据库,通过用户与角色,角色与操作的对应关系,可以解析出用户是否有权限做该操作。操作流程如图1所示。
2 权限验证模块接口设计实现
2.1 数据结构
与权限验证相关的数据结构:
结构体con_db用来存放解析出来的数据库,对应的数据库用户,对应数据库用户的密码
typedef struct con_db
{
char *con_database;//要连接的数据库
char *database_user;//对应的数据库用户
char *db_key;//对应数据库用户的密码
}con_db;
2.2 函数接口
输入项为指向业务请求字符串的指针以及用于存放后面连接业务数据库所需信息的指针。其中:对于指向业务请求字符串的指针,输入的数据类型为char**,标示为operation;对于存放连接业务数据库所需信息的指针,输入的数据类型为con_db*,标示为connection_db。
输出项为对应的验证结果,类型int,范围为-3~1;输出项的各种取值分别对应的含义见表1。
权限验证函数接口:
con_db auth_operation(char *operation,char *user);
输入的参数为用户的业务请求操作和用户名。
返回con_db。
3 实验结果
根据上述方法进行设计和实现,最终测试结果如表2所示:
4 小结
本文基于客户端应用程序+pgpool-II+PostgreSQL三层架构,实现了面向特定需求的权限验证,过滤掉了非法用户越权操作数据库的可能,提高了数据库连接利用率。
参考文献
[1] 刘宏杰.PostgreSQL数据库及应用.新疆油田公司勘探开发研究院.
[2] 曾侃.基于开源数据库PostgreSQL的地理空间数据管理方法研究.
[3] 王萌,杨梁怀.PostgreSQL数据库在不同调节器中的能效比较.