postgresql 登录使用GSS方式验证的实现原理分析
2016-06-21 00:00
253 查看
postgresql登录验证功能提供了trust, reject, md5, password, gss, sspi,ident, peer, pam, ldap, radius,cert等多种验证方式。用户可以使用其中的任何一种方式用来进行登录验证,当然DBA可以针对不同的客户端采用不同的验证方式。本文主要介绍下GSS方式在postgresql中的实现原理。
这是因为代码中使用了下面所示的宏来隔离GSS的相关的实现:
查看configure --help,可以看到有--with-gssapi的选项,通过这个选项来编译支持GSS。
从上面的内容,可以看到所有的客户端登录到服务端都是采用gss的验证方式的。也可以通过指定具体的IP地址来指定具体的客户端的验证方式。
1)客户端先调用gss_import_name函数导入服务器的名称。
其中conn->krbsvrname默认情况下为NULL,conn->pghost是主机IP地址。
2)客户端调用gss_init_sec_context函数启动安全上下文
当成功创建上下文时,函数gss_init_sec_context返回GSS_S_COMPLETE,或者返回GSS_S_CONTINUE_NEEDED,需要继续调用函数来创建安全上下文。
3)服务端调用gss_accept_sec_context函数来接收安全上下文
其中port->gss->ctx是空上下文GSS_C_NO_CONTEXT ,port->gss->cred是缺省凭证GSS_C_NO_CREDENTIAL。gbuf保存从客户端发送过来的令牌。
4)服务端调用gss_display_name函数获取客户端名称
通过上面的函数调用,就把客户端的名称保存到了gbuf中。提取出客户端的用户名与服务端的用户名想比较,如果相同则验证通过,否则就出现错误。
1. GSS简介
GSS是Generic security service的简写,其API称为GSS-API(Generic Security service Application Program Interface)。GSS-API在对等应用程序之间提供安全通信。GSS-API还提供验证、完整性和保密性服务。在Solaris中实现的GSS-API可以使用Kerberos v5、SPNEGO和Diffie-Hellman加密。GSS-API主要用于设计或实现安全的应用程序协议。GSS-API可以向其他类型的协议(如SASL)提供服务。GSS-API通过SASL来向LDAP提供服务。更多可以参考oracle的文档说明。2. GSS使用的条件
GSS在默认条件下编译出来的数据库版本是不支持gss的。直接配置验证方式为gss会在启动时直接报如下的错误:这是因为代码中使用了下面所示的宏来隔离GSS的相关的实现:
查看configure --help,可以看到有--with-gssapi的选项,通过这个选项来编译支持GSS。
3. 使用GSS的配置方法
postgresql的登录验证方式都是在pg_hba.conf文件中配置的,可以在对应的客户端的验证方式修改为GSS,如下所示:从上面的内容,可以看到所有的客户端登录到服务端都是采用gss的验证方式的。也可以通过指定具体的IP地址来指定具体的客户端的验证方式。
4. GSS的建立过程
GSS的建立过程的说明是根据postgresql中的代码来说的,不同的程序可能有不同的建立的过程。1)客户端先调用gss_import_name函数导入服务器的名称。
其中conn->krbsvrname默认情况下为NULL,conn->pghost是主机IP地址。
2)客户端调用gss_init_sec_context函数启动安全上下文
当成功创建上下文时,函数gss_init_sec_context返回GSS_S_COMPLETE,或者返回GSS_S_CONTINUE_NEEDED,需要继续调用函数来创建安全上下文。
3)服务端调用gss_accept_sec_context函数来接收安全上下文
其中port->gss->ctx是空上下文GSS_C_NO_CONTEXT ,port->gss->cred是缺省凭证GSS_C_NO_CREDENTIAL。gbuf保存从客户端发送过来的令牌。
4)服务端调用gss_display_name函数获取客户端名称
通过上面的函数调用,就把客户端的名称保存到了gbuf中。提取出客户端的用户名与服务端的用户名想比较,如果相同则验证通过,否则就出现错误。
相关文章推荐
- oracle命令行登录(默认用户名和密码)
- Ubuntu 14.04 安装mysql 5.6
- 非关系型数据库redis(一):Centos6.5安装Redis
- Oracle 下载安装教程
- Oracle递归查询:使用prior实现树操作
- MYSQL中存储过程的创建,调用及语法
- Redis-server在windows下闪退
- 浅谈数据库--事务(mysql)
- MySQL查询数据表的Auto_Increment(自增id)
- mysql共享锁与排他锁
- Oracle学习 第10天
- 查看现有Exchange 2010数据库大小
- ORM数据库框架使用
- mysql优化21条
- mysql事务、触发器、视图、存储过程、函数
- MongoDB学习笔记
- (二)Redis的安装及配置(2)---设置启动信息
- mysql常用基础操作语法(七)--统计函数和分组查询【命令行模式】
- MySQL及SQL语句笔记
- oracle数据类型