上篇文章我们介绍了SpringSecurity系统认证的流程,我们发现系统认证其实是通过一个UserDetailService的实现类来实现的,所以我们就可以使用相同的方式将认证的业务改成和数据库的对比 -- 配置数据库连接池 --> <! -- 数据库连接池 --> <property name="dataSource" ref="dataSource" /> <! public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { // 根据账号去数据库中查询 修改数据库中对应的密码 ? ? 六、认证状态判断 我们在实际项目中因为用户的不同操作,可能会给出不同的状态,比如正常,冻结等,SpringSecurity也支持,我们来看下,如何实现。
上文中已经大致说明了基于内存的Security认证方式,但是绝大多数情况下,我们的项目是基于数据库的,那如何基于数据库进行认证呢? 创建数据库 数据库文件已经上传到Github,地址 创建对应用户实体类 用户类继承自Security的UserDetails public class User implements UserDetails
一键领取预热专享618元代金券,1核1G云原生数据库TDSQL-C低至4.9元!云产品首单低0.8折起,企业用户购买域名1元起…
一、数据库设计 建数据库,加用户信息表: DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `id` int(11) NOT NULL platform.jdbc.initialSize=10 platform.jdbc.minIdle=10 platform.jdbc.maxActive=50 同样在WEB-INF的developerConfigContext.xml里,加上数据库 druid.stat.slowSqlMillis=200;druid.stat.logSlowSql=true"/>--> </bean> 同样在WEB-INF的developerConfigContext.xml里配置一下数据库认证控制器 -- 认证控制器 --> <bean id="queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler" class ,自己定义的认证控制器 <util:map id="authenticationHandlersResolvers"> <entry key-ref="proxyAuthenticationHandler
服务端配置已经介绍了怎么部署CAS服务端,不过在登录机制是用固定的账号密码登录,实际项目肯定不可以这样做,所以本博客怎么配置CAS服务端直接JDBC方式登录,具体的服务端配置参考:CAS4.2.7服务端配置 一、数据库设计 建数据库,加用户信息表: DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `id` int(11) NOT NULL AUTO_INCREMENT platform.jdbc.initialSize=10 platform.jdbc.minIdle=10 platform.jdbc.maxActive=50 同样在WEB-INF的developerConfigContext.xml里,加上数据库 druid.stat.slowSqlMillis=200;druid.stat.logSlowSql=true"/>--> </bean> 同样在WEB-INF的developerConfigContext.xml里配置一下数据库认证控制器 -- 认证控制器 --> <bean id="queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler" class
Oracle公司推出的最高级别的认证资质。 fr=aladdin Oracle数据库认证体系 ? ▲来自百度图片 ? / 11g OCM备考3——RAC搭建之安装grid http://blog.itpub.net/30935525/viewspace-2081502/ 11g OCM备考4——RAC搭建之安装数据库软件和建库 ・每场考试结束监考老师会跑脚本收分,所以最后一定要检查相关数据库连接正常 07 — OCM的个人成长 结果很重要,但是过程更重要。 但万变不离其宗,本文虽然是对11g OCM认证准备及考试经验总结,但是对12c及以后的版本依然有借鉴作用,希望对大家有所帮助! 用碎片化的时间,一点一滴地学习系统化的数据库知识。
认证问题 认证失败以及相关的问题通常由类似下面的错误消息显示: FATAL: no pg_hba.conf entry for host "123.123.123.123", user "andym", 检查你提供的口令,或者如果错误消息提到了 Kerberos 或 ident 认证类型,检查那些软件。 FATAL: user "andym" does not exist 指示的数据库用户没有被找到。 FATAL: database "testdb" does not exist 你试图连接的数据库不存在。请注意如果你没有声明数据库名,默认会用数据库用户名作为数据库名,这可能正确也可能不正确。 服务器日志可能包含比报告给客户端的更多的有关认证失败的信息。如果你为失败的原因而困惑,那么请检查服务器日志。
介绍 之前使用的全是基于内存的认证,这里使用基于数据库的认证。 设计数据表 这里设计数据表 [wp_editor_md_c80226e17602863cd62006de14c028b6.jpg] 创建项目 这里使用Mybatis作为项目。 spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 配置数据库
RADIUS 认证 这种认证方法的操作类似于password,不过它使用 RADIUS 作为密码验证方式。RADIUS 只被用于验证 用户名/密码对。 因此,在 RADIUS 能被用于认证之前,用户必须已经存在于数据库中。 当使用 RADIUS 认证时,一个访问请求消息将被发送到配置好的 RADIUS 服务器。 这一请求将是Authenticate Only类型,并且包含参数user name、password(加密的)和NAS Identifier。该请求将使用一个与服务器共享的密钥加密。 如果从一台服务器接收到否定响应,则认证失败。如果没有接收到响应,则将会尝试列表中的下一台服务器。要指定多台服务器,可将服务器名放在引号内并且用逗号分隔开。 这个参数可以被用作第二个参数标识例如该用户试图以哪个数据库用户进行认证,它可以被用于 RADIUS 服务器上的策略匹配。如果没有指定标识符,默认使用postgresql。
PAM 认证 这种认证方法操作起来类似password, 只不过它使用 PAM (插入式验证模块)作为认证机制。默认的 PAM 服务名是postgresql。 PAM 只被用于验证用户名/口令对并且可以有选择地验证已连接的远程主机名或 IP 地址。因此,在使用 PAM 进行认证之前,用户必须已经存在于数据库中。 默认情况下会使用 IP 地址。把这个选项设置为 1 可以使用解析过的主机名。 如果 PAM 被设置为读取/etc/shadow,认证将会失败,因为 PostgreSQL 服务器是由一个非 root 用户启动 。 然而,当 PAM 被配置为使用 LDAP 或其他认证验证方法时这就不是一个问题。
BSD 认证 这种认证方法操作起来类似于password,不过它使用 BSD 认证来验证口令。BSD 认证只被用来验证用户名/口令对。 因此,在 BSD 认证可以被用于认证之前,用户的角色必须已经存在于数据库中。BSD 认证框架当前只在 OpenBSD 上可用。 PostgreSQL中的 BSD 认证使用auth-postgresql登录类型,如果login.conf中定义了postgresql登录分类,就会用它来认证。 默认情况下这种登录分类不存在,PostgreSQL将使用默认的登录分类。 要使用 BSD 认证,PostgreSQL 用户账号(也就是运行服务器的操作系统用户)必须首先被加入到auth组中。 在 OpenBSD 系统上默认存在auth组。
GSSAPI 认证 GSSAPI是用于 RFC 2743 中定义的安全认证的一个工业标准协议。PostgreSQL根据 RFC 1964 支持带Kerberos认证的GSSAPI。 GSSAPI为支持它的系统提供自动认证(单点登录)。 认证本身是安全的,但通过数据库连接发送的数据将不被加密,除非使用SSL。 ,确保你有一个匹配被请求数据库用户名的 principal 的票据。 例如,对于数据库用户名fred,principal fred@EXAMPLE.COM将能够连接。 map 允许在系统和数据库用户名之间的映射。详见Section 20.2。
SSPI 认证 SSPI是一种用于带单点登录的安全认证的Windows技术。 当使用Kerberos认证时,SSPI和GSSAPI的工作方式相同,详见Section 20.6。 不要禁用这个选项,除非你的服务器运行在一个域账号(这包括一个域成员系统上的虚拟服务账号)下并且所有通过 SSPI 认证的所有客户端也在使用域账号,否则认证将会失败。 upn_username 如果这个选项和compat_realm一起被启用,来自 Kerberos UPN 的用户名会被用于认证。如果它被禁用(默认),会使用 SAM 兼容的用户名。 map 允许在系统和数据库用户名之间的映射。详见Section 20.2。
因此,在使用 LDAP 进行认证之前,用户必须已经存在于数据库中。 LDAP 认证可以在两种模式下操作。 someuser到数据库服务器的连接时,PostgreSQL 将尝试使用cn=someuser, dc=example, dc=net和客户端提供的口令来绑定到 LDAP 服务器。 如果那个连接成功,将被授予数据库访问。 如果第二个连接成功,将被授予数据库访问。 sub" 一些支持根据 LDAP 认证的其他软件使用相同的 URL 格式,因此很容易共享该配置。
Peer 认证 Peer 认证方法通过从内核获得客户端的操作系统用户名并把它用作被允许的数据库用户名(和可选的用户名映射)来工作。这种方法只在本地连接上支持。 下列被支持的配置选项用于peer: map 允许在系统和数据库用户名之间的映射。详见Section 20.2。 Peer 认证只在提供getpeereid()函数、SO_PEERCRED套接字参数或相似机制的操作系统上可用。这些 OS 当前包括Linux、大部分的BSD包括OS X以及Solaris。
Ident 认证 ident 认证方法通过从一个 ident 服务器获得客户端的操作系统用户名并且用它作为被允许的数据库用户名(和可选的用户名映射)来工作。它只在 TCP/IP 连接上支持。 当为一个本地(非 TCP/IP)连接指定 ident 时,将实际使用 peer 认证(见Section 20.9)。 下列被支持的配置选项用于ident: map 允许系统和数据库用户名之间的映射。详见Section 20.2。 因此这种认证方法只适用于封闭的网络, 这样的网络中的每台客户端机器都处于严密的控制下并且数据库和操作系统管理员操作时可以方便地联系。换句话说,你必须信任运行 ident 服务器的机器。 注意这样的警告: 标识协议的本意不是作为一种认证或访问控制协议。—RFC 1413有些 ident 服务器有一个非标准的选项,它导致返回的用户名是被加密的,使用的是只有原机器管理员知道的一个密钥。
腾讯分布式数据库TDSQL在分布式事务数据库的50项产品能力能力评测中,以47项通过的优异成绩通过此次评测,获得了评审委员会的一致认可。 腾讯分布式数据库TDSQL同时为公有云和专有云提供服务,是腾讯MySQL协议数据库管理系统的统称。 目前,TDSQL默认部署主备架构且提供了容灾、备份、恢复、监控等方面的全套解决方案,适用于GB~EB级的海量数据库场景。 TDSQL目前已经为超过500+的政企和金融机构提供数据库的公有云及专有云服务,客户覆盖银行、保险、证券、互联网金融、计费、第三方支付、物联网、互联网+、政务等领域。 腾讯自研数据库CynosDB 介绍PPT下载请移步腾讯云数据库公众号,见下方二维码,关注后回复“腾讯云新品发布会资料”即可下载
证书认证 这种认证方法使用 SSL 客户端证书执行认证。因此,它只适用于 SSL 连接。当使用这种认证方法时,服务器将要求客户端提供一个有效的、可信的证书。不会有密码提示将被发送到客户端。 证书的cn(通用名)属性将与被请求的数据库用户名进行比较,并且如果匹配将允许登录。用户名映射可以被用来允许cn与数据库用户名不同。 下列被支持的配置选项用于 SSL 证书认证: map 允许在系统和数据库用户名之间的映射。详见Section 20.2。 在一条指定证书认证的pg_hba.conf记录中,认证选项clientcert被假定为1,并且它不能被关掉,因为这种方法中一个客户端证书是必需的。 cert方法对基本clientcert证书验证测试所增加的东西是检查cn属性是否匹配数据库用户名。
以下节选择《Netkiller Architect 手札》 作者:netkiller 地址 http://www.netkiller.cn/architect/ 接下来几周的话题是数据库安全。 Token 认证 我们在staff表的基础上增加 token 字段 CREATE TABLE `staff` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT VALUES ('John', '678797066'); /* SQL错误(1001):Permission denied */ 下面再测试,首先生成一个正确的tokon, 然后使用该token插入数据 : -- 通过下面语句生成一个 Token select md5(concat('5','+','Jam','-')) as token; -- 使用上面的 Token 插入数据 INSERT INTO `staff` WHERE `id` = 5; 开发注意事项, Token 生成算法要保密,不要使用下面SQL提交数据 INSERT INTO `test`.
口令认证 有几种基于口令的认证方法。这些方法的过程类似,但是区别在于用户口令如何被存放在服务器上以及客户端提供的口令如何被通过连接发送。 不过,如果连接被SSL加密保护着,那么可以安全地使用password(不过如果依靠SSL,SSL证书认证可能是更好的选择)。 PostgreSQL数据库口令独立于操作系统用户口令。 每个数据库用户的口令被存储在pg_authid系统目录中。 如果没有为一个用户设置口令,那么存储的口令为空并且对该用户的口令认证总会失败。 不同的基于口令的认证方法的可用性取决于用户的口令在服务器上是如何被加密(或者更准确地说是哈希)的。 这由设置口令时的配置参数password_encryption控制。
物联网设备身份认证(IoT TID)为客户提供多安全等级、跨平台、资源占用少的物联网设备身份认证服务。通过控制台全流程可视化配置,帮助客户快速对接 TID 设备身份认证服务,全面提升各种物联网设备接入认证与数据的安全性……
扫码关注云+社区
领取腾讯云代金券