为了避免用户登录数据库时直接接触数据库登录密码,DM 提供了一种登录用户名密码外部存储方式,系统管理员可将用户名和密码存储在外部加密的密码文件(wallet 文件)中,用户登录数据库时只需提供配置好的服务名便可成功登录数据库。
具体实现分为两步:一是创建 wallet 文件,用于存储服务名、用户名和登录密码。二是配置 dm_svc.conf 文件,设置 wallet 文件路径以及服务名对应的数据库连接地址 (IP 和 PORT)。配置完成后用户便可直接通过服务名成功登录数据库。
以上数据库登录方式存在以下限制:
LOGIN 命令不支持利用 wallet 文件登录数据库
DM 管理工具和 JDBC 不支持利用 wallet 文件登录数据库
DM 提供了一个数据库密码管理工具 dmmkstore,系统管理员可通过 dmmkstore 工具创建、访问或修改 wallet 文件。
dmmkstore 是 DM 数据库密码管理工具。系统管理员可以通过 dmmkstore 工具创建、访问或修改 wallet 文件,wallet 文件中存储有数据库登录信息。支持跨平台或跨编码下发 wallet 文件。
数据库登录信息在 wallet 文件中以凭据(credential)的格式存储。每个凭据包含三个条目(entry):服务名、用户名、密码。系统管理员可以利用 dmmkstore 工具增加、删除或修改 wallet 文件中的凭据。
安装好 DM 数据库管理系统后,在安装目录的“bin”子目录下可找到 dmmkstore 执行文件。
启动操作系统的命令行窗口,进入 dmmkstore 所在目录,可以准备启动 dmmkstore 工具了。
dmmkstore 的使用需要指定必要的参数。为 dmmkstore 指定参数的格式为:
dmmkstore -wrl <wallet_location> {keyword [<value>]}
或
dmmkstore -help
-wrl:指定 wallet 文件路径。
keyword:参数关键字。关键字不区分大小写,多个参数之间使用空格间隔。
<value>:参数取值。参数关键字与参数取值之间使用空格间隔。
-help:显示帮助信息。
例如:
在/dm/dmdbms/wallet 目录下创建一个 wallet 文件,文件密码为
Wallet_123。
./dmmkstore -wrl /dm/dmdbms/wallet -create
输入口令: Wallet_123
再次输入口令: Wallet_123
如果创建成功,则/dm/dmdbms/wallet 目录下会生成一个加密的
dmwallet.prikey 文件。 在 wallet 文件中创建凭据:
./dmmkstore -wrl /dm/dmdbms/wallet -createCredential dm_user01 USER01 123456789
输入 Wallet 口令: Wallet_123
Create credential DM.security.client.connect_string1
查看 wallet 文件中的凭据:
./dmmkstore -wrl /dm/dmdbms/wallet -listCredential
输入 Wallet 口令: Wallet_123
List credential (index: connect_string username)
1: dm_user01 USER01
dmmkstore 使用较为灵活,参数较多。用户可使用“-help”命令快速查看dmmkstore 版本信息以及各参数信息。
./dmmkstore -help
DM Secret Store Tool: V8
version: 1-2-101-21.12.16-153499-10000-ENT
dmmkstore [-wrl wrl] [-create] [-list] [-viewEntry alias] [-modifyEntry alias
secret] [-createCredential connect_string username password] [-listCredential]
[-modifyCredential connect_string username password] [-deleteCredential
connect_string] [-cipherName name] [-hashName name] [-help]
下面将详细介绍 dmmkstore 工具各常用参数的功能以及使用方法。
指定wallet文件路径,语法如下:
dmmkstore -wrl <wallet_location>
<wallet_location>:wallet 文件路径。
该参数单独使用时无任何实际效果,必须搭配 dmmkstore 工具的其他参数(除-help参数)一起使用。 当-wrl 参数与其他参数一起使用时,-wrl 参数必须作为第一个参数,否则报错。
创建 wallet 文件。 语法如下:
dmmkstore -wrl <wallet_location> -create
创建 wallet 文件时,需要指定 wallet 文件的密码,该密码长度范围为 9~48,并且必须同时包含大写字母、小写字母、数字以及特殊字符。创建成功后将在<wallet_location>指定路径下生成一个加密的dmwallet.prikey 文件。若指定路径下已存在 dmwallet.prikey 文件,则报错。
例如:在/dm/dmdbms/wallet 目录下创建一个 wallet 文件,文件密码为: Wallet_123。
./dmmkstore -wrl /dm/dmdbms/wallet -create
输入口令: Wallet_123
再次输入口令: Wallet_123
在 wallet 文件中创建凭据,语法如下:
dmmkstore -wrl <wallet_location> -createCredential <server_name> <username>
<password>
<server_name>:服务名。必须与 dm_svc.conf 文件中配置的服务名相匹配。
<username>:用户名。
<password>:密码。
若 wallet 文件中已存在服务名相同的凭据,则报错。
wallet 文件最大为 64M,若创建凭据时 wallet 文件大小超过 64M,则报错。
例如:
在 wallet 文件中创建凭据,服务名为 dm_user01,用户名为 USER01,登录密码为123456789。
./dmmkstore -wrl /dm/dmdbms/wallet -createCredential dm_user01 USER01 123456789
显示 wallet 文件中的凭据。语法如下:
dmmkstore -wrl <wallet_location> -listCredential
执行结果中会显示凭据的序号、服务名、用户名。
例如:
查看/dm/dmdbms/wallet 路径下 wallet 文件中的凭据
./dmmkstore -wrl /dm/dmdbms/wallet -listCredential
输入 Wallet 口令: Wallet_123
List credential (index: connect_string username)
1: dm_user01 USER01
修改 wallet 文件中指定凭据的用户名和密码,语法如下:
./dmmkstore -wrl <wallet_location> -modifyCredential <server_name> <username> <password>
<server_name>:待修改凭据的服务名。
<username>:修改后的用户名。
<password>:修改后的密码。
若 wallet 文件中不存在服务名为<server_name>的凭据,则报错。
例如:
将 wallet 文件中服务名为 dm_user01 的凭据的用户名改为 SYSDBA,密码改为 SYSDBA。
./dmmkstore -wrl /dm/dmdbms/wallet -modifyCredential dm_user01 SYSDBA SYSDBA
输入 Wallet 口令: Wallet_123
Modify credential
Modify 1
删除 wallet 文件中指定的凭据。语法如下:
./dmmkstore -wrl <wallet_location> -deleteCredential <server_name>
<server_name>:待删除凭据的服务名。
若 wallet 文件中不存在服务名为<server_name>的凭据,则报错。
例如:
删除 wallet 文件中服务名为 dm_user01 的凭据。
./dmmkstore -wrl /dm/dmdbms/wallet -deleteCredential dm_user01
输入 Wallet 口令: Wallet_123
Delete credential
Delete 1
显示 wallet 文件中所有凭据条目的别名。语法如下:
./dmmkstore -wrl <wallet_location> -list
凭据中各条目的别名如下表所示:
其中,%d 表示该条目所在凭据的序号。
例如:
查看 wallet 文件中的所有凭据。
./dmmkstore -wrl /dm/dmdbms/wallet -listCredential
输入 Wallet 口令: Wallet_123
List credential (index: connect_string username)
1: dm_user01 USER01
2: dm_admin SYSDBA
可以看到,此时 wallet 文件中共有两条凭据,服务名分别为 dm_user01 和
dm_admin,凭据序号分别为 1 和 2。
查看 wallet 文件中所有凭据条目的别名。
./dmmkstore -wrl /dm/dmdbms/wallet -list
输入 Wallet 口令: Wallet_123
DM 密钥存储条目:
DM.security.client.connect_string1
DM.security.client.connect_string2
DM.security.client.password1
DM.security.client.password2
DM.security.client.username1
DM.security.client.username2
显示凭据中指定条目的值。语法如下:
./dmmkstore -wrl <wallet_location> -viewEntry <alias>
<alias>:指定条目的别名。条目别名不区分大小写,关于条目别名的详细介绍请参
考 1.1.3.7 -list。
若指定的条目为密码,则将以明文形式显示密码。
若指定的条目不存在,则报错。
例如:
查看别名为 DM.security.client.password1 的条目的值。
./dmmkstore -wrl /dm/dmdbms/wallet -viewEntry DM.security.client.password1
输入 Wallet 口令: Wallet_123
DM.security.client.password1 = 123456789
修改凭据中指定条目的值。语法如下:
dmmkstore -wrl <wallet_location> -modifyEntry <alias> <value>
<alias>:指定条目的别名。条目别名不区分大小写,关于条目别名的详细介绍请参
考 1.1.3.7 -list。
<value>:修改后条目的值。
若指定的条目不存在,则报错。
例如:
将别名为 DM.security.client.password1 的条目的值修改为“987654321”。
./dmmkstore -wrl /dm/dmdbms/wallet -modifyEntry DM.security.client.password1 987654321
输入 Wallet 口令: Wallet_123
查看别名为 DM.security.client.password1 的条目的值。
./dmmkstore -wrl /dm/dmdbms/wallet -viewEntry DM.security.client.password1
输入 Wallet 口令: Wallet_123
DM.security.client.password1 = 987654321
利用wallet 文件登录时,dm_svc.conf 文件中的配置项WALLET_LOCATION 必须非空,客户端会通过用户输入的服务名以及 WALLET_LOCATION 配置项指定的 wallet 文件路径自动获取 wallet 文件中服务名所对应的用户名和密码,因此用户无需输入用户名和密码,若用户输入了用户名和密码,则优先使用用户输入的用户名和密码登录数据库。
dm_svc.conf 是一个客户端配置文件,它包含了 DM 各接口和客户端工具所需要配置的一些参数。它必须和接口/客户端工具位于同一台机器上才能
生效。
dm_svc.conf 的工作目录是固定的,不能改变。用户如果需要将其修改并拷贝到其他客户端机器上,也必须位于相同的目录中。dm_svc.conf 的工作目录就是初始 dm_svc.conf 文件的生成目录。
初始 dm_svc.conf 文件在 DM 安装时自动生成。不同平台的生成目录有所不同。
使用全局配置项 WALLET_LOCATION 指定 wallet 文件所在路径,并配置服务名对应的数据库连接地址(IP 和 PORT)。仅当全局配置项 WALLET_LOCATION 非空时,才可通过 wallet 文件登录数据库。
例如:dm_svc.conf 文件中的配置内容如下:
WALLET_LOCATION=(/dm/dmdbms/wallet) #wallet文件在服务器的路径
#其中,dm_user01、dm_user02为配置在wallet中的服务名。
dm_user01=(192.168.100.163:5254)
dm_user02=(192.168.100.163:5254)
下面列出一个完整的 dmmkstore 工具应用实例以供参考。
数据库中新建用户 user01 和 user02。
CREATE USER USER01 IDENTIFIED BY 123456789;
CREATE USER USER02 IDENTIFIED BY 987654321;
COMMIT;
dm_svc.conf 文件中的配置内容如下:
WALLET_LOCATION=(/dm/dmdbms/wallet)
dm_user01=(192.168.100.163:5254)
dm_user02=(192.168.100.163:5254)
在/dm/dmdbms/wallet 路径下创建一个 wallet 文件,文件密码为Wallet_123。
./dmmkstore -wrl /dm/dmdbms/wallet -create
输入口令: Wallet_123
再次输入口令: Wallet_123
在 wallet 文件中创建两条凭据,服务名分别为 dm_user01 和 dm_user02。
./dmmkstore -wrl /dm/dmdbms/wallet -createCredential dm_user01 USER01 123456789
输入 Wallet 口令: Wallet_123
Create credential DM.security.client.connect_string1
./dmmkstore -wrl /dm/dmdbms/wallet -createCredential dm_user02 USER02 987654321
输入 Wallet 口令: Wallet_123
Create credential DM.security.client.connect_string2
查看 wallet 文件中的凭据。
./dmmkstore -wrl /dm/dmdbms/wallet -listCredential
输入 Wallet 口令: Wallet_123
List credential (index: connect_string username)
1: dm_user01 USER01
2: dm_user02 USER02
disql 客户端工具通过 dm_user01 服务名登录数据库:
./disql /@dm_user01
服务器[192.168.100.163:5254]:处于普通打开状态
登录使用时间 : 9.232(ms)
Disql V8
SQL> SELECT USER();
行号 USER()
1 USER01
dexp客户端工具通过dm_user01服务名登陆数据库进行逻辑备份:
./dexp /@dm_user01 directory=’/dmdata/dmbak’ file=dmp_exp.dmp SCHEMAS=‘USER01’ TABLESPACE=N DROP=N LOG=DEXP.LOG
关于各客户端工具登录数据库方法的详细介绍请参考各客户端工具使用手册。
文章
阅读量
获赞