DM创建外部JAVA函数
要求说明:
1.用户需要有DBA权限,比如EUNOMIA用户,需要给该用户分配DBA权限。
2.配置可以使用外部函数,设置dm.ini参数 ENABLE_EXTERNAL_CALL=1
3.JAVA 外部函数的执行都通过代理 dmagent 工具进行,为了执行 JAVA 外部函数,需
要先启动 dmagent 服务
4.JAVA 外部函数调用应保证当前用户可以运行 JAVA 命令,否则会
导致调用失败。
目录说明
当前dm安装目录为C:\dmdbms,则
Agent使用脚本目录为:C:\dmdbms\web\dem_init.sql
Agent配置目录C:\dmdbms\tool\dmagent\config.properties
dm.ini目录:C:\dmdbms\data\DAMENG\dm.ini
示例:
在windows环境下,以用户名为EUNOMIA,schema为EUNOMIA为例。
启动DM数据库,登入EUNOMIA用户,执行相关脚本
修改脚本的schema为EUNOMIA,执行脚本。
脚本目录为:C:\dmdbms\web\dem_init.sql
说明:
DM Agent 是对一个库的代理。所以首先需要一个用户对应的库,然后执行相应的脚本。
比如当前用户为EUNOMIA,一般定义schema为EUNOMIA,则先修改脚本的schema为EUNOMIA,执行脚本。
相关配置修改
修改Agent配置:
C:\dmdbms\tool\dmagent\config.properties
#[General]
#run_mode values:
#0 - assist process
#1 - assist process & monitor
#2 - assist process & monitor & deployer
run_mode=2
ap_port=6363
rmi_port=6364
#[DEM]
center.url=http://localhost:8080/eunomia
center.agent_servlet=dem/dma_agent
说明:
1.修改run_mode为2
2.修改center.url为当前DM数据库服务器地址,这里的eunomia为schema的名,一般与用户名相同。
DM数据库配置修改
1.dm.ini参数 ENABLE_EXTERNAL_CALL=1
2.dm.ini中的 EXTERNAL_JFUN_PORT 和dmagent的ap_port保持一致
重新启动DM数据库
运行Agent
(以下内容以 windows 平台为例,Linux 平台请运行同名的 sh 脚
本)
DMAgentRunner.bat:dmagent 命令行模式运行脚本。
用户如果以命令行模式运行 dmagent,请直接运行 DMAgentRunner.bat。
创建JAVA类,打包成jar包后,复制到相应目录
目录为:C:\dmdbms\bin
需要在该目录下创建文件夹external_jar,然后将jar包放入该文件夹下。
这里我们将 eu_account_extend_encrypt.jar放到该目录下:
C:\dmdbms\bin\external_jar\eu_account_extend_encrypt.jar
创建JAVA函数
执行脚本,创建JAVA函数
CREATE OR REPLACE function eu_account_extend_encrypt(str varchar2,str2 varchar2) return varchar2
EXTERNAL ‘C:\dmdbms\bin\external_jar\eu_account_extend_encrypt.jar’ “com/test/encrypt/EncryptUtil.encrypt” USING java;
测试JAVA函数
select eu_account_extend_encrypt(‘需要加密的值’,‘AES加密秘钥’);
执行脚本对账户拓展表数据进行加密
注意:
函数 eu_account_extend_encrypt(ACCEX_VALUE,'2k8j s ′ ) , 第 二 个 参 数 值 为 A E S 加 密 算 法 的 秘 钥 , 需 要 根 据 配 置 中 心 的 配 置 值 来 确 认 。 比 如 : a c c o u n t . e x t e n d . a e s . s e c r e t = 2 k 8 j s'),第二个参数值为AES加密算法的秘钥,需要根据配置中心的配置值来确认。比如:account.extend.aes.secret=2k8j s′),第二个参数值为AES加密算法的秘钥,需要根据配置中心的配置值来确认。比如:account.extend.aes.secret=2k8js ,则该秘钥值为 2k8j$s。修改sql后,执行。
– 对身份证号进行加密处理
update eu_account_extend set ACCEX_VALUE=eu_account_extend_encrypt(ACCEX_VALUE,‘2k8j
s
′
)
w
h
e
r
e
a
c
c
e
x
c
o
d
e
=
′
I
D
C
A
R
D
N
O
′
a
n
d
r
e
g
e
x
p
l
i
k
e
(
A
C
C
E
X
V
A
L
U
E
,
′
[
1
−
9
]
[
[
:
d
i
g
i
t
:
]
]
7
(
(
0
[
[
:
d
i
g
i
t
:
]
]
)
∣
(
1
[
0
−
2
]
)
)
(
(
[
0
∣
1
∣
2
]
[
[
:
d
i
g
i
t
:
]
]
)
∣
3
[
0
−
1
]
)
[
[
:
d
i
g
i
t
:
]
]
3
s') where accex_code ='ID_CARD_NO' and regexp_like(ACCEX_VALUE,'^[1-9][[:digit:]]{7}((0[[:digit:]])|(1[0-2]))(([0|1|2][[:digit:]])|3[0-1])[[:digit:]]{3}
s′)whereaccexcode=′IDCARDNO′andregexplike(ACCEXVALUE,′[1−9][[:digit:]]7((0[[:digit:]])∣(1[0−2]))(([0∣1∣2][[:digit:]])∣3[0−1])[[:digit:]]3|1[[:digit:]]{5}[1-9][[:digit:]]{3}((0[[:digit:]])|(1[0-2]))(([0|1|2][[:digit:]])|3[0-1])[[:digit:]]{3}([0-9]|X)$’);
– 对手机号进行加密处理
update eu_account_extend set accex_value=eu_account_extend_encrypt(ACCEX_VALUE,‘2k8j
s
′
)
w
h
e
r
e
a
c
c
e
x
c
o
d
e
=
′
P
H
O
N
E
N
O
′
a
n
d
r
e
g
e
x
p
l
i
k
e
(
A
C
C
E
X
V
A
L
U
E
,
′
[
1
]
[
35678
]
[
0
−
9
]
9
s') where accex_code ='PHONE_NO' and regexp_like(ACCEX_VALUE,'^[1][35678][0-9]{9}
s′)whereaccexcode=′PHONENO′andregexplike(ACCEXVALUE,′[1][35678][0−9]9’);
– 对邮箱进行加密处理
update eu_account_extend set accex_value=eu_account_extend_encrypt(ACCEX_VALUE,‘2k8jKaTeX parse error: Can't use function '\.' in math mode at position 100: …[a-zA-Z0-9_-]+(\̲.̲[a-zA-Z0-9_-]+)…’);
1-9 ↩︎