LLL的数据库培训-104-第五部分—Oracle安全管理—第5讲—mkstore管理下的客户端免密码登录
一、关于Oracle中mkstore工具的介绍
1、关于mkstore工具的介绍
在ORACLE 10G前,我们在SHELL或JDBC中连接数据库时,都需要输入用户名与密码,并且都是明文。
从1OGR2开始,ORACLE提供wallet这个钱包功能,可以实现无需输入用户名与密码就可以登陆数据库,其中配合使用的工具就是mkstore.
2、mkstore和alter system set encryption key authenticated by区别
(1)mkstore:
mkstore是一个命令行工具,用于创建和管理Oracle数据库中的加密钥匙存储库。 它可以用于存储数据库连接凭据、SSL证书、加密密钥等敏感信息。 mkstore可以在数据库服务器上直接运行,并通过命令行参数指定操作类型,如添加、删除、修改密钥等。
(2)alter system set encryption key authenticated by
这是一个SQL语句,用于在Oracle数据库中设置或更改加密密钥。 它需要具有适当权限的用户执行,并且需要通过身份验证进行授权。 该语句可以设置数据库实例级别的加密密钥,以保护数据库中的敏感数据,如存储在表空间中的加密列或加密存储。
(3)两者区别和联系
总体而言,mkstore主要用于创建和管理加密密钥存储库,
而alter system set encryption key authenticated by则用于设置或更改数据库实例级别的加密密钥。
它们可以结合使用,以确保数据库中的敏感数据得到适当的保护。
3、mkstore创建的文件
在使用Oracle Wallet时,mkstore命令创建的cwallet.sso和ewallet.p12是两个重要的文件。
(1)cwallet.sso:
这是一个用于存储Oracle Wallet的文件,其中包含诸如加密密钥、证书和其他敏感信息等内容。
它是Oracle Wallet的主要文件,用于保护数据库凭据和密钥。
cwallet.sso文件是加密的,只能由具有适当权限的用户或进程读取和解析它。
cwallet.sso是Oracle中的一个安全存储库文件,用于存储加密的认证信息,比如数据库用户的密码和凭证。它通常是在Oracle Wallet Manager工具中使用mkstore命令创建的。cwallet.sso文件使用了Oracle自己的加密算法来保护其中的敏感数据。
(2)ewallet.p12:
这是一个用于导出和导入Oracle Wallet的可移植格式文件。
它包含与Oracle Wallet相关的私钥、证书和其他凭据。
您可以使用ewallet.p12文件在不同的系统之间共享和复制Oracle Wallet。
该文件是以密钥库格式(PKCS#12)保存的,可以在支持PKCS#12的工具和应用程序中打开和操作。
ewallet.p12也是一个安全存储库文件,用于存储X.509数字证书和私钥。这些证书和私钥通常用于SSL/TLS通信和身份验证。ewallet.p12文件可以由Oracle Wallet Manager工具中的mkstore命令创建。
(3)总结来说
cwallet.sso是Oracle Wallet的主要文件,用于存储数据库用户的密码和凭证,包含敏感信息,
ewallet.p12是一个可移植的文件,用于导入和导出Oracle Wallet。ewallet.p12用于存储SSL/TLS证书和私钥
两个文件都是保护数据库凭据和密钥的关键组成部分。
二、mkstore工具管理
1、mkstore语法:
mkstore是Oracle提供的一个命令行工具,用于管理Oracle Wallets,该工具允许您创建、修改和删除Oracle Wallets中的条目,管理SSL证书和密钥等。以下是mkstore的一般语法:
mkstore option1 [value1] option2 [value2] ...
其中,option表示mkstore命令的不同选项,而value表示相应选项的值。常用的选项包括:
-wrl: 指定Oracle Wallet的位置(路径)。例如:-wrl /path/to/wallet -create: 创建新的Oracle Wallet。 -delete: 删除现有的Oracle Wallet。 -listCredential: 列出Oracle Wallet中存储的凭据。 -createCredential: 将数据库用户名和密码添加到Oracle Wallet。例如:-createCredential <db_alias> <username> <password>,其中<db_alias>是数据库连接的别名,<username>和<password>是要存储到Oracle Wallet的用户名和密码。 -modifyCredential: 修改Oracle Wallet中现有凭据的用户名和密码。 -deleteCredential: 从Oracle Wallet中删除凭据。 -register: 用于将密钥或证书注册到Oracle Wallet。 -unbind: 从Oracle Wallet中解绑密钥或证书。
请注意,具体的选项和语法可能会有所不同,或者随着Oracle版本的更新而有所变化。建议查阅相关的Oracle文档或使用mkstore -help命令获取详细的语法和选项说明。
2、利用mkstore删除alter system set encryption key authenticated by创建的钱包如何删除
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -delete
Enter wallet password:输入当前wallet2中钱包的密码:Htsxw123321
3、mkstore的管理维护
(1)创建钱包
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -create
密码设置为Hdsoft123
(2)创建登录用户
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -createCredential mesorcl219 test 123
(3)创建第二个用户连接
tnsname需要配置为其他的名称,否则会报:Create credential Secret Store error occured: oracle.security.pki.OracleSecretStoreException: Credential already exists
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -createCredential mesorcl221 test 123
(4)mkstore查看用户创建列表
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -listCredential
(5)修改用户列表
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -modifyCredential
(6)删除用户列表
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -deleteCredential
(7)删除钱包
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -delete
7、注意:
上述实验可以成功,我们可以去客户端进行mkstore的启用,也可以直接无密码访问数据库。
三、mkstore创建用户和密码,用户无密码登录数据库
注:在Oracle客户端创建,无论是windows还是linux都可以。
1、创建钱包目录
mkdir -p /oracle/app/oracle/admin/mesorcl/wallet2 chmod 777 /oracle/app/oracle/admin/mesorcl/wallet2
2、编辑sqlnet.ora
vi $ORACLE_HOME/network/admin/sqlnet.ora
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY =/oracle/app/oracle/admin/mesorcl/wallet2)
)
)
SQLNET.WALLET_OVERRIDE=TRUE
在 Oracle 数据库中,`SQLNET.WALLET_OVERRIDE=TRUE` 是 `sqlnet.ora` 文件中的一个属性设置。它用于指定是否允许数据库连接过程中的钱包覆盖。
当设置 `SQLNET.WALLET_OVERRIDE=TRUE` 后,它会允许连接过程中使用的钱包(即客户端钱包)覆盖服务器端钱包中的凭据。这意味着,如果客户端钱包中存在与服务器端凭据相同别名的凭据,客户端钱包中的凭据将会覆盖服务器端钱包中的凭据。
这个属性的作用在于提供了一种方式来配置客户端钱包的凭据优先级。当客户端和服务器端都具有相同别名的凭据时,如果设置了 `SQLNET.WALLET_OVERRIDE=TRUE`,则优先使用客户端钱包中的凭据。这使得可以在不对服务器端进行修改的情况下,通过配置客户端钱包来实现凭据的灵活管理和覆盖。
需要注意的是,当使用钱包覆盖时,要确保客户端钱包的安全性,以免凭据泄露。建议采取适当的措施来保护客户端钱包文件和访问权限。
总之,将 `SQLNET.WALLET_OVERRIDE` 设置为 `TRUE` 允许客户端钱包覆盖服务器端钱包中的凭据,从而提供了一种在连接过程中管理和使用凭据的灵活性。
3、编辑tnsname
vi $ORACLE_HOME/network/admin/tnsnames.ora
mesorcl219 = (description = (address_list = (address = (protocol = tcp)(host =192.168.20.219)(port = 1521)) ) (connect_data = (sid = mesorcl) ) )
4、测试tns
tnsping mesorcl219 Attempting to contact (description = (address_list = (address = (protocol = tcp)(host =192.168.20.221)(port = 1521))) (connect_data = (sid = mesorcl))) OK (0 msec)
5、创建建钱包
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -create
密码设置为Hdsoft123
6、创建登录用户
mkstore -wrl /oracle/app/oracle/admin/mesorcl/wallet2 -createCredential mesorcl219 test 123
其中mesorcl219是tns的别名。
7、无密码登录测试:
sqlplus /@mesorcl219 TEST@mesorcl219>
8、注意
注:如果此处登录失败,提示ORA-12578: TNS:wallet open failed,有几点一定要注意
--先检查sqlnet.ora中的开头是否是“WALLET_LOCATION = ”,而不是“ENCRYPTION_WALLET_LOCATION = ”开头
--确认钱包文件和路径是否正确无误。使用 ls 命令检查 /oracle/app/oracle/admin/mesorcl/wallet2 目录确保钱包文件存在。
--验证钱包文件的所有者和权限设置。确保文件和目录的所属者正确,并且对于 Oracle 进程和用户,具有适当的读取和写入权限。
--检查 tnsnames.ora 文件,确保连接别名(mesorcl219)确实与钱包别名匹配。
--验证数据库实例监听是否成功加载了修改的 tnsnames.ora 文件。