设为首页 加入收藏

TOP

使用Oracle的Security External Password Store功能实现无密码登录数据库
2017-02-15 08:15:09 】 浏览:3088
Tags:使用 Oracle Security External Password Store 功能 实现 密码 登录 数据库

如果需要从SHELL脚本来连接到Oracle数据库,那么这些脚本包含数据库连接详细信息,这可能是一个主要的安全问题。一个解决方案是使用操作系统身份验证,但Oracle 10g第2版提供了使用安全外部密码存储的功能。其中Oracle登录证书存储在客户端Oracle电子钱包中,这样的话,在SHELL脚本里就可以使用“/ @ db_alias”这样的语法来连接。这对于用脚本登录数据库进行操作来说是非常有用的,尤其对于企业安全要求很高,不希望用户名和密码明文存在配置文件中,而且对于密码的维护是极为方便的,比如把wallet放在指定路径下,当修改密码时,只需统一覆盖wallet即可。


今天我和大家分享一下,如何使用Oracle的Security External Password Store功能实现无密码登录数据库,以此不将明文密码暴露在生产环境当中。


那么,Oracle是如何通过安全外部密码存储(Secure External Password Store)来达到无密码登录数据库呢?我们来说,连接到数据库的密码证书是存储在Oracle wallet里,这个wallet(钱夹)是一个用来保存认证和签名证书的一种安全软件容器。这种钱包使用可以简化依靠密码凭据连接到数据库的大规模部署。 配置此功能时,应用程序代码,批处理作业和脚本不再需要嵌入的用户名和密码。 风险降低,因为这样的密码不再以明确的方式暴露,并且当用户名或密码改变时,密码管理策略更容易实施,而不改变应用程序代码。


因为用“安全外部密码存储”这种方式所存储的密码密文信息是存储在Oracle wallet里的,那么我们先介绍一下,什么是Oracle wallet以及它里面可以存储一些什么信息?请看下面的一段英文描述,wKioL1icdimAJizaAABw-YOoEGs541.png-wh_50


中文翻译如下,


说的直白一点,Oracle wallet可以形象的比喻成我们日常生活中的钱包一样,在钱包里,我们可以放银行卡、身份证、信用卡、公司的员工卡、就餐卡等等。


看了上面的一段英文描述和中文翻译,想必大家对Oracle wallet也有所了解。那么到底什么是Oracle的Secure External Password Store(安全外部密码存储)呢?我们再看下面的一段英文描述,



中文翻译如下,


使用安全外部密码存储,Oracle将数据库凭据(即用户名和密码)安全地存储在Oracle电子钱包中。 在启动数据库连接时,Oracle访问钱包并根据连接字符串读取凭据。 由于配置了自动登录,因此无需密码即可打开钱包并读取凭据。 只有在电子钱包中添加,更改或删除凭据时才需要密码。


连接字符串在电子钱包中是唯一的。 每个连接字符串只能存储一个凭证。 同一数据库的不同凭据必须由不同的连接字符串区分。


从上面的中文解读,我们可以得知,安全外部密码存储就是Oracle把用户名和密码存放在Oracle wallet的一种安全加密形式。


下面我们根据Oracle 10gR2官方文档中的Secure External Password Store功能来演示和操作,最终实现无密码登录数据库。


虽然说,使用wallet的图形界面(在command line interface下 输入owm命令可以打开)可以极大的简化管理密码证书,至于为什么不能用owm(oracle wallet manager)来创建和管理wallet的外部密码存储,而是使用mkstore命令?以下是摘自Oracle官方文档的一段描述:



一般来说,用户(包括应用程序、批处理任务和脚本)都是通过一个标准的数据库连接字符串(database_connect_string)的连接语句(connect statement)来连接到Oracle数据库的。这些字符串里包括用户名、密码和网络服务名,或者是在tnsnames.ora文件当中列出的TNS别名,还有另一种连接字符串的形式是主机名:端口号:sid(这种形式在应用程序连接到Oracle数据库当中随处可见)。


比如,下面这样的连接形式:



其中ORASALES为TNS别名,ourhost37:1527:DB17为主机名:端口号:sid。


然而,如果客户端配置了安全外部密码存储的话,就可以使用下面的连接语法来连接到数据库,而不需要指定用户名和密码。




在这种情况下,数据库证书、用户名和密码是安全地存储在创建的Oracle钱夹里,由于wallet的自动登录特性(auto login)是打开的,也就是说,一旦创建了wallet以后是自动打开的,所以不需要密码去打开wallet。在这个wallet里有证书,而用来连接数据库的用户名和密码的信息就保存在这个证书里。


接下来,我们就开始使用外部密码存储来配置Oracle的客户端。


1、先查看一下Oracle软件默认的wallet目录所在的位置和状态



从上图可以看出,wallet的类型是以文件形式存在,而且默认的wallet就是位于$ORACLE_BASE/admin/$ORACLE_SID/wallet目录,状态为关闭。那么,我们再去相应的位置查看一下wallet目录是否存在,



从上图可以得知,wallet目录不存在,因为我们从来没有创建过wallet,它的状态应该就是closed,所以我们在用mkstore命令(前面在说不能用owm创建wallet时提到过)创建wallet之前,必须先创建一个存在的wallet目录。这里为了安全起见,也为了防止将wallet目录误删除,我们不把wallet目录放在刚才用v$encryption_wallet视图查出的位置,即$ORACLE_BASE/admin/$ORACLE_SID下,而是放到$ORACLE_HOME/owm(因为$ORACLE_HOME是Oracle软件所在目录,而且我们也不允许去改动这里的目录和文件)。


下面进行创建wallet目录,



2、在Oracle客户端开启external password store(外部密码存储)。


(1)使用mkstore命令先创建一个wallet,命令语法来自官方文档



wallet_location参数指定为我们刚才创建的wallet目录



上面提示,要给wallet输入一个密码(在wallet打开时需要输入,在创建完wallet以后,Oracle会自动打开),这里输入Oracle123(输入的密码不回显哦),再输入一遍(同样不回显,如果2次输入的不一样,Oracle会提示重新输入的)。


那么,我们到wallet目录下面查看一下是生成了什么文件。



其中cwallet.sso文件是用于保存wallet是否自动登录的信息,ewallet.p12文件是用来保存相关的证书信息,而我们要使用的用户名和密码的信息就保存在证书里。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇向Oracle的blob字段导入文件 下一篇Oracle多条件的统计查询(case wh..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目