首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

oracle使用3DES加密

2023-11-12 来源:华拓网

 

CREATE OR REPLACE PACKAGE dbc_cryptor IS SYSKEY VARCHAR2(16) := ‘0000000012345678‘; FUNCTION encrypt_3des(v_str IN VARCHAR2, v_key IN VARCHAR2 DEFAULT SYSKEY) RETURN RAW; FUNCTION decrypt_3des(v_raw IN RAW, v_key IN VARCHAR2 DEFAULT SYSKEY) RETURN VARCHAR2;END;/CREATE OR REPLACE PACKAGE BODY dbc_cryptor ISFUNCTION encrypt_3des(v_str IN VARCHAR2, v_key IN VARCHAR2 DEFAULT SYSKEY) RETURN RAW ASv_str_raw RAW(2048);BEGINif v_str is null then RETURN NULL;end if;if (MOD(LENGTHB(v_str), 8) > 0) then v_str_raw := UTL_RAW.CAST_TO_RAW(RPAD(v_str, (floor(LENGTHB(v_str)/8)+1)*8, chr(0))); else v_str_raw := UTL_RAW.CAST_TO_RAW(v_str);end if;return DBMS_OBFUSCATION_TOOLKIT.DES3Encrypt(input => v_str_raw, key => UTL_RAW.CAST_TO_RAW(v_key), which => 0, iv => NULL);END;FUNCTION decrypt_3des(v_raw IN raw, v_key IN VARCHAR2 DEFAULT SYSKEY) RETURN VARCHAR2 ASBEGINif v_raw is null or MOD(LENGTH(v_raw), 16) <> 0 then RETURN NULL;end if;return UTL_RAW.CAST_TO_VARCHAR2(DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt(input => v_raw, key => UTL_RAW.CAST_TO_RAW(v_key), which => 0, iv => NULL));END;END;/

 

oracle使用3DES加密

标签:ati   length   varchar   arc   creat   pre   加密   class   pac   

小编还为您整理了以下内容,可能对您也有帮助:

oracle 3des加密key的位数为32怎么办

Des的密钥是8个字节,但实际上只有7个用上,也就是56位。
3des是用3个或2个des密钥加密一串明文,最少112位最多168位。也就是14~21个字母或数字符号。

从安全性上来说密钥位数不足是不能加密的,但有些软件为了保证用户可用,会自动使用某种策略自动填充满,一般是重复填充或采用特定字符,如果你只填了1234作为密钥,有可能真正用于加密的密钥是123412341234123412341或者123400000000000000000类似的。

另外请注意,最好去做3des的密钥位数不是7或8,因为des的加密解密是同一个过程,这样搞在填充后实际上是只使用了一次des加密••••••还不如5位6位好••••••

oracle 3des加密key的位数为32怎么办

Des的密钥是8个字节,但实际上只有7个用上,也就是56位。
3des是用3个或2个des密钥加密一串明文,最少112位最多168位。也就是14~21个字母或数字符号。

从安全性上来说密钥位数不足是不能加密的,但有些软件为了保证用户可用,会自动使用某种策略自动填充满,一般是重复填充或采用特定字符,如果你只填了1234作为密钥,有可能真正用于加密的密钥是123412341234123412341或者123400000000000000000类似的。

另外请注意,最好去做3des的密钥位数不是7或8,因为des的加密解密是同一个过程,这样搞在填充后实际上是只使用了一次des加密••••••还不如5位6位好••••••

如何在Oracle SecureFiles中加密数据

用于加密非LOB字段的透明数据加密语法与在Oracle SecureFiles中启用加密的语法完全相同。它们有一个重要的区别,非LOB字段可以使用NO SALT参数阻止TDE在加密数据之前先给数据添加一个随机字符串。Oracle SecureFile LOB字段不支持NO SALT选项。我们可以使用数据字典视图USER_ENCRYPTED_COLUMNS确定应该加密哪一些字段,以及这些字段的状态。下面是一些ENCRYPT子句的例子:
CREATE TABLE tab_3DES (col1 CLOB ENCRYPT USING '3DES168')
LOB(col1) STORE AS SECUREFILE(
CACHE
NOLOGGING
);
使用默认加密算法(AES192)和一个密码创建一个Oracle SecureFile LOB字段:
CREATE TABLE tab_enc_pw (col1 CLOB ENCRYPT IDENTIFIED BY badpassword)
LOB(col1) STORE AS SECUREFILE(
CACHE
);
使用AES256启用LOB加密:
ALTER TABLE tab_nocrypt MODIFY
( col1 CLOB ENCRYPT USING 'AES256');
通过重新生成加密密钥修改一个Oracle SecureFiles字段:
ALTER TABLE tab_3DES REKEY USING 'AES256';
Disable LOB encryption:
禁用LOB加密:
ALTER TABLE tab_enc_pw MODIFY
( col1 CLOB DECRYPT);
Oracle数据库中存储的大对象数据容量会继续增长,但是存储费用在不断下降。其中有许多的敏感数据,如医疗记录、员工数据和知识产权。能够对这些信息进行加密,这是非常宝贵的,也可以避免在将来投入大量金钱和精力去实现安全性。

如何在Oracle SecureFiles中加密数据

用于加密非LOB字段的透明数据加密语法与在Oracle SecureFiles中启用加密的语法完全相同。它们有一个重要的区别,非LOB字段可以使用NO SALT参数阻止TDE在加密数据之前先给数据添加一个随机字符串。Oracle SecureFile LOB字段不支持NO SALT选项。我们可以使用数据字典视图USER_ENCRYPTED_COLUMNS确定应该加密哪一些字段,以及这些字段的状态。下面是一些ENCRYPT子句的例子:
CREATE TABLE tab_3DES (col1 CLOB ENCRYPT USING '3DES168')
LOB(col1) STORE AS SECUREFILE(
CACHE
NOLOGGING
);
使用默认加密算法(AES192)和一个密码创建一个Oracle SecureFile LOB字段:
CREATE TABLE tab_enc_pw (col1 CLOB ENCRYPT IDENTIFIED BY badpassword)
LOB(col1) STORE AS SECUREFILE(
CACHE
);
使用AES256启用LOB加密:
ALTER TABLE tab_nocrypt MODIFY
( col1 CLOB ENCRYPT USING 'AES256');
通过重新生成加密密钥修改一个Oracle SecureFiles字段:
ALTER TABLE tab_3DES REKEY USING 'AES256';
Disable LOB encryption:
禁用LOB加密:
ALTER TABLE tab_enc_pw MODIFY
( col1 CLOB DECRYPT);
Oracle数据库中存储的大对象数据容量会继续增长,但是存储费用在不断下降。其中有许多的敏感数据,如医疗记录、员工数据和知识产权。能够对这些信息进行加密,这是非常宝贵的,也可以避免在将来投入大量金钱和精力去实现安全性。

Oracle默认管理员到底怎么回事?

试验了几次不成功后,求助于Oracle官方提供的文档,在e13852.pdf中有段关于用户名和密码的描述.原来是在WebLogic 11g(即WebLogic10.3.1)版本中Oracle默认管理员密码做了修改,这里给出的是welcome1,但是在控制台登录页面进行测试后发现仍不能正常登录,于是转到boot.properties文件(…\system11.1.1.1.33.54.07\DefaultDomain\servers\DefaultServer\security)中查看是否跟之前版本有所变动.发现了与之前版本的不同点,之前版本的用户名密码采用的是3DES加密方式,而在新版本中,采用的是AES加密.最后,经过查证,在新版本的WebLogic中,用户的密码必须包含数字,因此Oracle将WebLogic的默认管理员密码设置成了weblogic1,而非其文档中描述的welcome1,即用户名和密码为weblogic/weblogic1。不过,以上内容都是在JDeveloper 11g新版本自带的WebLogic中进行测试,版WebLogic还需后面进行验证.安装ORACLE时,若没有为下列用户重设密码,则其默认密码如下:用户名/密码:sys/change_on_install 登录身份:SYSDBA或SYSOPER说明:不能以NORMAL登录,可作为Oracle默认系统管理员system/manager,SYSDBA或NORMAL不能以SYSOPER登录,可作为Oracle默认系统管理员sysman/oem_temp,sysman 为oms的用户名Oracle默认管理员密码是固定的,这是为了安装和调试的方便。Oracle数据库中的两个具有DBA权限的用户Sys和System。笔者发现很多国内网站的Oracle数据库没有更改这两个用户的密码,其中也包括很多大型的电子商务网站,我们就可以利用这个缺省密码去找我们感兴趣的东西。进行测试前我们先来了解一些相关的知识,我们连接一个Oracle数据库的时候,需要知道它的service_name或者是Sid值,就象mssql一样,需要知道数据库名。那如何去知道呢,猜?呵呵,显然是不行的。这里我们先讲讲oracle的TNSlistener,它位于数据库Client和数据库Server之间,默认监听1521端口,这个监听端口是可以更改的。但是如果你用一个tcp的session去连接1521端口的话,oracle将不会返回它的banner,如果你输入一些东西的话,它甚至有可能把你踢出去。这里我们就需要用tnscmd.pl这个perl程序了,它可以查询远程 oracle数据库是否开启(也就是ping了),查询版本,以及查询它的服务名,服务状态和数据库服务名,而且正确率很高。理论方面的讲完了,如果还有什么不懂的可以去查找相关资料。现在开始测试吧,需要的工具有:ActivePerl,Oracle客户端,Superscan或者是其它扫描端口的软件,Tnscmd.pl.我们先用Superscan扫描开放了端口1521的主机,假设其IPxx.xx.110.110,这样目标已经有了。然后我们要做的就是用Tnscmd.pl来查询远程数据库的服务名了.从上面得到的信息我们可以看出数据库的服务名为ORCL,然后我们就可以通过sqlplus工具来远程连上它了,用户名和密码我们用默认的 system/manager或者是sys/manager(Oracle默认管理员),其他的如mdsys/mdsys,ctxsys/ctxsys等,这个默认用户和密码是随版本的不同而改变的。如果密码正确,那么就会提示connected源码天空,如果不行,再换别的默认用户名和密码。经过笔者的尝试一般用dbsnmp/dbsnmp都能进去。当然如果对方已经把默认密码改了,那我们只能换别的目标了。但是我发现很多都是不改的,这个就是安全意识的问题了。附录 Oracle默认管理员密码1.用户名:sys 密码:change_on_install2.用户名:system 密码:manager

Oracle定义DES加密解密及MD5加密函数示例

(1)DES加密函数
create
or
replace
function
encrypt_des(p_text
varchar2,
p_key
varchar2)
return
varchar2
is
v_text
varchar2(4000);
v_enc
varchar2(4000);
raw_input
RAW(128)
;
key_input
RAW(128)
;
decrypted_raw
RAW(2048);
begin
v_text
:=
rpad(
p_text,
(trunc(length(p_text)/8)+1)*8,
chr(0));
raw_input
:=
UTL_RAW.CAST_TO_RAW(v_text);
key_input
:=
UTL_RAW.CAST_TO_RAW(p_key);
dbms_obfuscation_toolkit.DESEncrypt(input
=>
raw_input,key
=>
key_input,encrypted_data
=>decrypted_raw);
v_enc
:=
rawtohex(decrypted_raw);
dbms_output.put_line(v_enc);
return
v_enc;
end;
(2)DES解密函数
create
or
replace
function
decrypt_des(p_text
varchar2,p_key
varchar2)
return
varchar2
is
v_text
varchar2(2000);
begin
dbms_obfuscation_toolkit.DESDECRYPT(input_string
=>
UTL_RAW.CAST_TO_varchar2(p_text),key_string
=>p_key,
decrypted_string=>
v_text);
v_text
:=
rtrim(v_text,chr(0));
dbms_output.put_line(v_text);
return
v_text;
end;
(3)MD5加密函数
CREATE
OR
REPLACE
FUNCTION
MD5(passwd
IN
VARCHAR2)
RETURN
VARCHAR2
IS
retval
varchar2(32);
BEGIN
retval
:=
utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING
=>
passwd))
;
RETURN
retval;
END;
(4)函数使用示例
DES加密:
update
tb_salarysign_staff
s
set
s.staffpwd
=encrypt_des(s.staffpwd,
'test#5&124*!de');
DES解密:select
decrypt_des(s.staffpwd,
'test#5&124*!de')
from
tb_salarysign_staff
s
MD5加密:
update
tb_salarysign_staff
s
set
s.staffpwd
=
md5(s.staffpwd);

Oracle定义DES加密解密及MD5加密函数示例

(1)DES加密函数
create
or
replace
function
encrypt_des(p_text
varchar2,
p_key
varchar2)
return
varchar2
is
v_text
varchar2(4000);
v_enc
varchar2(4000);
raw_input
RAW(128)
;
key_input
RAW(128)
;
decrypted_raw
RAW(2048);
begin
v_text
:=
rpad(
p_text,
(trunc(length(p_text)/8)+1)*8,
chr(0));
raw_input
:=
UTL_RAW.CAST_TO_RAW(v_text);
key_input
:=
UTL_RAW.CAST_TO_RAW(p_key);
dbms_obfuscation_toolkit.DESEncrypt(input
=>
raw_input,key
=>
key_input,encrypted_data
=>decrypted_raw);
v_enc
:=
rawtohex(decrypted_raw);
dbms_output.put_line(v_enc);
return
v_enc;
end;
(2)DES解密函数
create
or
replace
function
decrypt_des(p_text
varchar2,p_key
varchar2)
return
varchar2
is
v_text
varchar2(2000);
begin
dbms_obfuscation_toolkit.DESDECRYPT(input_string
=>
UTL_RAW.CAST_TO_varchar2(p_text),key_string
=>p_key,
decrypted_string=>
v_text);
v_text
:=
rtrim(v_text,chr(0));
dbms_output.put_line(v_text);
return
v_text;
end;
(3)MD5加密函数
CREATE
OR
REPLACE
FUNCTION
MD5(passwd
IN
VARCHAR2)
RETURN
VARCHAR2
IS
retval
varchar2(32);
BEGIN
retval
:=
utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING
=>
passwd))
;
RETURN
retval;
END;
(4)函数使用示例
DES加密:
update
tb_salarysign_staff
s
set
s.staffpwd
=encrypt_des(s.staffpwd,
'test#5&124*!de');
DES解密:select
decrypt_des(s.staffpwd,
'test#5&124*!de')
from
tb_salarysign_staff
s
MD5加密:
update
tb_salarysign_staff
s
set
s.staffpwd
=
md5(s.staffpwd);

Oracle数据库中文件加密详解

在Oracle数据库系统中 用户如果要以特权用户身份登录Oracle数据库可以有两种身份验证的方法 即使用与操作系统集成的身份验证或使用Oracle数据库的密码文件进行身份验证 因此 管理好密码文件 对于控制授权用户从远端或本机登录Oracle数据库系统 执行数据库管理工作 具有重要的意义

Oracle数据库的密码文件存放有超级用户INTERNAL/SYS的口令及其他特权用户的用户名/口令 它一般存放在ORACLE_HOMEDATABASE目录下

创建密码文件

在使用Oracle Instance Manager创建一数据库实例的时侯 在ORACLE_HOMEDATABASE目录下还自动创建了一个与之对应的密码文件 文件名为PWDSID ORA 其中SID代表相应的Oracle数据库系统标识符 此密码文件是进行初始数据库管理工作的基矗在此之后 管理员也可以根据需要 使用工具ORAPWD EXE手工创建密码文件 命令格式如下

C: >ORAPWDFILE=< FILENAME >PASSWORD =< PASSWORD > ENTRIES=< MAX_USERS >

各命令参数的含义为

FILENAME 密码文件名;

PASSWORD 设置INTERNAL/SYS帐号的口令

MAX_USERS 密码文件中可以存放的最大用户数 对应于允许以SYSDBA/SYSOPER权限登录数据库的最大用户数 由于在以后的维护中 若用户数超出了此* 则需要重建密码文件 所以此参数可以根据需要设置得大一些

有了密码文件之后 需要设置初始化参数REMOTE_LOGIN_PASSWORDFILE来控制密码文件的使用状态

设置初始化参数

在Oracle数据库实例的初始化参数文件中 此参数控制着密码文件的使用及其状态 它可以有以下几个选项

NONE 指示Oracle系统不使用密码文件 特权用户的登录通过操作系统进行身份验证

EXCLUSIVE 指示只有一个数据库实例可以使用此密码文件 只有在此设置下的密码文件可以包含有除INTERNAL/SYS以外的用户信息 即允许将系统权限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户

SHARED 指示可有多个数据库实例可以使用此密码文件 在此设置下只有INTERNAL/SYS帐号能被密码文件识别 即使文件中存有其他用户的信息 也不允许他们以SYSOPER/SYSDBA的权限登录 此设置为缺省值

在REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVE SHARED情况下 Oracle系统搜索密码文件的次序为 在系统注册库中查找ORA_SID_PWFILE参数值(它为密码文件的全路径名);若未找到 则查找ORA_PWFILE参数值;若仍未找到 则使用缺省值ORACLE_HOMEDATABASEPWDSID ORA;其中的SID代表相应的Oracle数据库系统标识符

向密码文件中增加 删除用户

当初始化参数REMOTE_LOGIN_PASSWORDFILE设置为EXCLUSIVE时 系统允许除INTERNAL/SYS以外的其他用户以管理员身份从远端或本机登录到Oracle数据库系统 执行数据库管理工作;这些用户名必须存在于密码文件中 系统才能识别他们 由于不管是在创建数据库实例时自动创建的密码文件 还是使用工具ORAPWD EXE手工创建的密码文件 都只包含INTERNAL/SYS用户的信息;为此 在实际操作中 可能需要向密码文件添加或删除其他用户帐号

由于仅被授予SYSOPER/SYSDBA系统权限的用户才存在于密码文件中 所以当向某一用户授予或收回SYSOPER/SYSDBA系统权限时 他们的帐号也将相应地被加入到密码文件或从密码文件中删除 由此 向密码文件中增加或删除某一用户 实际上也就是对某一用户授予或收回SYSOPER/SYSDBA系统权限

要进行此项授权操作 需使用SYSDBA权限(或INTERNAL帐号)连入数据库 且初始化参数REMOTE_LOGIN_PASSWORDFILE的设置必须为EXCLUSIVE 具体操作步骤如下

创建相应的密码文件;

设置初始化参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;

使用SYSDBA权限登录 CONNECTSYS/internal_user_passswordASSYSDBA;

启动数据库实例并打开数据库;

创建相应用户帐号 对其授权(包括SYSOPER和SYSDBA) 授予权限 GRANTSYSDBATOuser_name;

收回权限 REVOKESYSDBAFROMuser_name 现在这些用户可以以管理员身份登录数据库系统了

使用密码文件登录

有了密码文件后 用户就可以使用密码文件以SYSOPER/SYSDBA权限登录Oracle数据库实例了 注意初始化参数REMOTE_LOGIN_PASSWORDFILE应设置为EXCLUSIVE或SHARED 任何用户以SYSOPER/SYSDBA的权限登录后 将位于SYS用户的Schema之下 以下为两个登录的例子

以管理员身份登录

假设用户scott已被授予SYSDBA权限 则他可以使用以下命令登录

CONNECTscott/tigerASSYSDBA

以INTERNAL身份登录

CONNECTINTERNAL/INTERNAL_PASSWORD

保护密码文件

查看密码文件中的成员

可以通过查询视图V$PWFILE_USERS来获取拥有SYSOPER/SYSDBA系统权限的用户的信息 表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用户是否拥有相应的权限 这些用户也就是相应地存在于密码文件中的成员

修改密码文件的状态

密码文件的状态信息存放于此文件中 当它被创建时 它的缺省状态为SHARED 可以通过改变初始化参数REMOTE_LOGIN_PASSWORDFILE的设置改变密码文件的状态 当启动数据库事例时 Oracle系统从初始化参数文件中读取REMOTE_LOGIN_PASSWORDFILE参数的设置;当加载数据库时 系统将此参数与口令文件的状态进行比较 如果不同 则更新密码文件的状态 若计划允许从多台客户机上启动数据库实例 由于各客户机上必须有初始化参数文件 所以应确保各客户机上的初始化参数文件的一致性 以避免意外地改变了密码文件的状态 造成数据库登陆的失败

修改密码文件的存储位置

密码文件的存放位置可以根据需要进行移动 但作此修改后 应相应修改系统注册库有关指向密码文件存放位置的参数或环境变量的设置

删除密码文件

lishixin/Article/program/Oracle/201311/16762

    Oracle数据库中文件加密详解

    在Oracle数据库系统中 用户如果要以特权用户身份登录Oracle数据库可以有两种身份验证的方法 即使用与操作系统集成的身份验证或使用Oracle数据库的密码文件进行身份验证 因此 管理好密码文件 对于控制授权用户从远端或本机登录Oracle数据库系统 执行数据库管理工作 具有重要的意义

    Oracle数据库的密码文件存放有超级用户INTERNAL/SYS的口令及其他特权用户的用户名/口令 它一般存放在ORACLE_HOMEDATABASE目录下

    创建密码文件

    在使用Oracle Instance Manager创建一数据库实例的时侯 在ORACLE_HOMEDATABASE目录下还自动创建了一个与之对应的密码文件 文件名为PWDSID ORA 其中SID代表相应的Oracle数据库系统标识符 此密码文件是进行初始数据库管理工作的基矗在此之后 管理员也可以根据需要 使用工具ORAPWD EXE手工创建密码文件 命令格式如下

    C: >ORAPWDFILE=< FILENAME >PASSWORD =< PASSWORD > ENTRIES=< MAX_USERS >

    各命令参数的含义为

    FILENAME 密码文件名;

    PASSWORD 设置INTERNAL/SYS帐号的口令

    MAX_USERS 密码文件中可以存放的最大用户数 对应于允许以SYSDBA/SYSOPER权限登录数据库的最大用户数 由于在以后的维护中 若用户数超出了此* 则需要重建密码文件 所以此参数可以根据需要设置得大一些

    有了密码文件之后 需要设置初始化参数REMOTE_LOGIN_PASSWORDFILE来控制密码文件的使用状态

    设置初始化参数

    在Oracle数据库实例的初始化参数文件中 此参数控制着密码文件的使用及其状态 它可以有以下几个选项

    NONE 指示Oracle系统不使用密码文件 特权用户的登录通过操作系统进行身份验证

    EXCLUSIVE 指示只有一个数据库实例可以使用此密码文件 只有在此设置下的密码文件可以包含有除INTERNAL/SYS以外的用户信息 即允许将系统权限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户

    SHARED 指示可有多个数据库实例可以使用此密码文件 在此设置下只有INTERNAL/SYS帐号能被密码文件识别 即使文件中存有其他用户的信息 也不允许他们以SYSOPER/SYSDBA的权限登录 此设置为缺省值

    在REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVE SHARED情况下 Oracle系统搜索密码文件的次序为 在系统注册库中查找ORA_SID_PWFILE参数值(它为密码文件的全路径名);若未找到 则查找ORA_PWFILE参数值;若仍未找到 则使用缺省值ORACLE_HOMEDATABASEPWDSID ORA;其中的SID代表相应的Oracle数据库系统标识符

    向密码文件中增加 删除用户

    当初始化参数REMOTE_LOGIN_PASSWORDFILE设置为EXCLUSIVE时 系统允许除INTERNAL/SYS以外的其他用户以管理员身份从远端或本机登录到Oracle数据库系统 执行数据库管理工作;这些用户名必须存在于密码文件中 系统才能识别他们 由于不管是在创建数据库实例时自动创建的密码文件 还是使用工具ORAPWD EXE手工创建的密码文件 都只包含INTERNAL/SYS用户的信息;为此 在实际操作中 可能需要向密码文件添加或删除其他用户帐号

    由于仅被授予SYSOPER/SYSDBA系统权限的用户才存在于密码文件中 所以当向某一用户授予或收回SYSOPER/SYSDBA系统权限时 他们的帐号也将相应地被加入到密码文件或从密码文件中删除 由此 向密码文件中增加或删除某一用户 实际上也就是对某一用户授予或收回SYSOPER/SYSDBA系统权限

    要进行此项授权操作 需使用SYSDBA权限(或INTERNAL帐号)连入数据库 且初始化参数REMOTE_LOGIN_PASSWORDFILE的设置必须为EXCLUSIVE 具体操作步骤如下

    创建相应的密码文件;

    设置初始化参数REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;

    使用SYSDBA权限登录 CONNECTSYS/internal_user_passswordASSYSDBA;

    启动数据库实例并打开数据库;

    创建相应用户帐号 对其授权(包括SYSOPER和SYSDBA) 授予权限 GRANTSYSDBATOuser_name;

    收回权限 REVOKESYSDBAFROMuser_name 现在这些用户可以以管理员身份登录数据库系统了

    使用密码文件登录

    有了密码文件后 用户就可以使用密码文件以SYSOPER/SYSDBA权限登录Oracle数据库实例了 注意初始化参数REMOTE_LOGIN_PASSWORDFILE应设置为EXCLUSIVE或SHARED 任何用户以SYSOPER/SYSDBA的权限登录后 将位于SYS用户的Schema之下 以下为两个登录的例子

    以管理员身份登录

    假设用户scott已被授予SYSDBA权限 则他可以使用以下命令登录

    CONNECTscott/tigerASSYSDBA

    以INTERNAL身份登录

    CONNECTINTERNAL/INTERNAL_PASSWORD

    保护密码文件

    查看密码文件中的成员

    可以通过查询视图V$PWFILE_USERS来获取拥有SYSOPER/SYSDBA系统权限的用户的信息 表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用户是否拥有相应的权限 这些用户也就是相应地存在于密码文件中的成员

    修改密码文件的状态

    密码文件的状态信息存放于此文件中 当它被创建时 它的缺省状态为SHARED 可以通过改变初始化参数REMOTE_LOGIN_PASSWORDFILE的设置改变密码文件的状态 当启动数据库事例时 Oracle系统从初始化参数文件中读取REMOTE_LOGIN_PASSWORDFILE参数的设置;当加载数据库时 系统将此参数与口令文件的状态进行比较 如果不同 则更新密码文件的状态 若计划允许从多台客户机上启动数据库实例 由于各客户机上必须有初始化参数文件 所以应确保各客户机上的初始化参数文件的一致性 以避免意外地改变了密码文件的状态 造成数据库登陆的失败

    修改密码文件的存储位置

    密码文件的存放位置可以根据需要进行移动 但作此修改后 应相应修改系统注册库有关指向密码文件存放位置的参数或环境变量的设置

    删除密码文件

    lishixin/Article/program/Oracle/201311/16762

      2019-07-15

      检测到远端XFS服务正在运行中漏洞

      临时关闭fs.auto服务:

      可以通过编辑/etc/inetd.conf文件,重新启动Inetd进程来关闭fs.auto服务:

      1. 注释/etc/inetd.conf文件中的如下一行:

      #fs              stream  tcp    wait nobody /usr/openwin/lib/fs.auto    fs

      2. 重新启动inetd进程:

      # ps -elf |grep inetd

          root  138    1  0  Oct 15 ?        0:00 /usr/sbin/inetd

      # kill -1 138

      solaris 查找文件 find命令

      1. find命令格式

       find: [-H | -L] 路径列表 谓词列表

       可以使用:man find 查看命令选项。

      2. 通过文件名查找法:

       如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls"命令就能方便的查找出来,如果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了sshd_config(ssh 服务器 的配置文件)这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用如下命令

      find / -name sshd_config 

       这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机 屏幕 上显示出查找结果列表:

       #find / -name sshd_config

       /var/sadm/pkg/SUNWsshdr/save/pspool/SUNWsshdr/reloc/etc/ssh/sshd_config 

        /etc/ssh/sshd_config 

       如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find/ -name sshd_config 命令,而可能是你的系统中没有安装ssh 服务器 ,这时只要你安装了ssh服务器,然后再使用find / -name sshd_config 就能找到这个配置文件了。 

      服务器支持 TLS Client-initiated 重协商攻击 (CVE-2011-1473)

      SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。

      重协商就是大部分TLS连接都以handshake为开始,经过应用数据的交换,最后关闭会话。如果在第一次handshake之后(可能经历了应用数据的交换也可能没有)请求重新协商,就会发起一次新的handshake,对新的安全参数达成一致

      关闭命令:ssl renegotiation disable

      远端rsh 服务允许部分用户登录。需要禁止rsh 服务 。

      方法:

      cat /.rhosts 查看是否有 + 号,意思是允许所有其他机器访问。 我们主要VI编辑将+去掉即可。(该配置文件,其做用就是控制访问IP)

      因为RSH服务不能控制入访因此我们需要禁用内网所有主机的出访服务

      禁用RSH出访服务 svcadm disable svc:/network/shell:default

      禁用rlogin服务 svcadm disable svc:/network/login:rlogin

      检测到远端rsh 服务正在运行中。禁用RSH 服务,改用SSH 代替 。

      方法:

      1、vi /.rhosts 去掉其中的+号

      2、vi /etc/default/login

      CONSOLE=/dev/console 将这一行#注释掉。

      因为RSH服务不能控制入访因此我们需要禁用内网所有主机的出访服务

      3、禁用RSH出访服务 svcadm disable svc:/network/shell:default

      4、禁用rlogin服务 svcadm disable svc:/network/login:rlogin

      SSL 3.0 POODLE攻击信息泄露漏洞(CVE-2014-3566)

      现场次漏洞只存在于服务器,后又发现此漏洞依赖于服务器的5989端口,可以在防火墙禁用此端口或杀掉此进程

      方法一 编辑: vi /etc/sysconfig/iptables

      添加:-A INPUT -p tcp --dport 5989 -j DROP

      -A INPUT -p tcp --sport 5989 -j DROP

      重启网络服务:service iptables restart

      方法二 根据netstat –tunlp|grep 5989 查找PID ,pwdxPID查看程序路径,如没问题则可以杀死此进程。

      POODLE = Padding Oracle On Downgraded Legacy Encryption.是最新安全漏洞(CVE-2014-3566)的代号,俗称“贵宾犬”漏洞。 此漏洞是针对 SSL 3.0中CBC模式加密算法的一种padding oracle攻击,可以让攻击者获取 SSL 通信中的部分信息明文,如果将明文中的重要部分获取了,比如cookie,session,则信息的安全出现了隐患。

      从本质上说,这是 SSL 设计上的缺陷, SSL 先认证再加密是不安全的。

      修复措施:

      禁用sslv3协议

      不同的web server不尽相同。这边列举主流的服务器的禁用方式

      Nginx服务器:

      注意:nginx和openssl套件版本过低可能会导致无法启用新型加密套件和算法,请升级最新版本。

      (openssl1.0.1+版本支持TLS1.1和TLS1.2协议)

      ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 

      ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL;

      ssl_prefer_server_ciphers  on;

      apache服务器:

      注意:apache和openssl套件版本过低可能会导致无法启用新型加密套件和算法,请升级最新版本。

      (openssl1.0.1+版本支持TLS1.1和TLS1.2协议)

      apache2.X版本:

      SSLProtocol  all -SSLv2 -SSLv3

      SSLCipherSuite ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL

      SSLHonorCipherOrder on

      Tomcat服务器:

      JDK版本过低也会带来不安全漏洞,请升级JDK为最新版本。升级JDK风险请安按照系统升级风险酌情考虑。

      (先备份再配置,低版本的配置后有启动不了的风险,请升级tomcat和jdk版本,JDK1.7及以上支持TLS1.2协议)

      maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

      keystoreFile="keystore/domain.jks"  keystorePass="证书密码"

      clientAuth="false" sslProtocol="TLS"

      ciphers="TLS_RSA_WITH_AES_128_GCM_SHA256,

      TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,

      TLS_RSA_WITH_AES_128_CBC_SHA,

      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,

      TLS_RSA_WITH_AES_128_CBC_SHA256,

      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,

      SSL_RSA_WITH_3DES_EDE_CBC_SHA,

                              TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />

      使用apr的tomcat(windows环境路径请使用“\”,证书文件是for apache压缩包中的三个文件)

      maxThreads="150"

      protocol="org.apache.coyote.http11.Http11AprProtocol"

      enableLookups="false" disableUploadTimeout="true"

      acceptCount="100" scheme="https" secure="true"

      SSLEnabled="true"

      SSLProtocol="all -SSLv2 -SSLv3"

      SSLCertificateFile="conf/domian.com.crt"

      SSLCertificateKeyFile="conf/domian.com.key"

      SSLCertificateChainFile="conf/root_bundle.crt"

                     SSLCipherSuite="ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL" />

      2019-07-15

      检测到远端XFS服务正在运行中漏洞

      临时关闭fs.auto服务:

      可以通过编辑/etc/inetd.conf文件,重新启动Inetd进程来关闭fs.auto服务:

      1. 注释/etc/inetd.conf文件中的如下一行:

      #fs              stream  tcp    wait nobody /usr/openwin/lib/fs.auto    fs

      2. 重新启动inetd进程:

      # ps -elf |grep inetd

          root  138    1  0  Oct 15 ?        0:00 /usr/sbin/inetd

      # kill -1 138

      solaris 查找文件 find命令

      1. find命令格式

       find: [-H | -L] 路径列表 谓词列表

       可以使用:man find 查看命令选项。

      2. 通过文件名查找法:

       如果你把这个文件放在单个的文件夹里面,只要使用常见的“ls"命令就能方便的查找出来,如果知道了某个文件的文件名,而不知道这个文件放到哪个文件夹,甚至是层层套嵌的文件夹里。举例说明,假设你忘记了sshd_config(ssh 服务器 的配置文件)这个文件在系统的哪个目录下,甚至在系统的某个地方也不知道,则这是可以使用如下命令

      find / -name sshd_config 

       这个命令语法看起来很容易就明白了,就是直接在find后面写上 -name,表明要求系统按照文件名查找,最后写上httpd.conf这个目标文件名即可。稍等一会系统会在计算机 屏幕 上显示出查找结果列表:

       #find / -name sshd_config

       /var/sadm/pkg/SUNWsshdr/save/pspool/SUNWsshdr/reloc/etc/ssh/sshd_config 

        /etc/ssh/sshd_config 

       如果输入以上查找命令后系统并没有显示出结果,那么不要以为系统没有执行find/ -name sshd_config 命令,而可能是你的系统中没有安装ssh 服务器 ,这时只要你安装了ssh服务器,然后再使用find / -name sshd_config 就能找到这个配置文件了。 

      服务器支持 TLS Client-initiated 重协商攻击 (CVE-2011-1473)

      SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。

      重协商就是大部分TLS连接都以handshake为开始,经过应用数据的交换,最后关闭会话。如果在第一次handshake之后(可能经历了应用数据的交换也可能没有)请求重新协商,就会发起一次新的handshake,对新的安全参数达成一致

      关闭命令:ssl renegotiation disable

      远端rsh 服务允许部分用户登录。需要禁止rsh 服务 。

      方法:

      cat /.rhosts 查看是否有 + 号,意思是允许所有其他机器访问。 我们主要VI编辑将+去掉即可。(该配置文件,其做用就是控制访问IP)

      因为RSH服务不能控制入访因此我们需要禁用内网所有主机的出访服务

      禁用RSH出访服务 svcadm disable svc:/network/shell:default

      禁用rlogin服务 svcadm disable svc:/network/login:rlogin

      检测到远端rsh 服务正在运行中。禁用RSH 服务,改用SSH 代替 。

      方法:

      1、vi /.rhosts 去掉其中的+号

      2、vi /etc/default/login

      CONSOLE=/dev/console 将这一行#注释掉。

      因为RSH服务不能控制入访因此我们需要禁用内网所有主机的出访服务

      3、禁用RSH出访服务 svcadm disable svc:/network/shell:default

      4、禁用rlogin服务 svcadm disable svc:/network/login:rlogin

      SSL 3.0 POODLE攻击信息泄露漏洞(CVE-2014-3566)

      现场次漏洞只存在于服务器,后又发现此漏洞依赖于服务器的5989端口,可以在防火墙禁用此端口或杀掉此进程

      方法一 编辑: vi /etc/sysconfig/iptables

      添加:-A INPUT -p tcp --dport 5989 -j DROP

      -A INPUT -p tcp --sport 5989 -j DROP

      重启网络服务:service iptables restart

      方法二 根据netstat –tunlp|grep 5989 查找PID ,pwdxPID查看程序路径,如没问题则可以杀死此进程。

      POODLE = Padding Oracle On Downgraded Legacy Encryption.是最新安全漏洞(CVE-2014-3566)的代号,俗称“贵宾犬”漏洞。 此漏洞是针对 SSL 3.0中CBC模式加密算法的一种padding oracle攻击,可以让攻击者获取 SSL 通信中的部分信息明文,如果将明文中的重要部分获取了,比如cookie,session,则信息的安全出现了隐患。

      从本质上说,这是 SSL 设计上的缺陷, SSL 先认证再加密是不安全的。

      修复措施:

      禁用sslv3协议

      不同的web server不尽相同。这边列举主流的服务器的禁用方式

      Nginx服务器:

      注意:nginx和openssl套件版本过低可能会导致无法启用新型加密套件和算法,请升级最新版本。

      (openssl1.0.1+版本支持TLS1.1和TLS1.2协议)

      ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 

      ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL;

      ssl_prefer_server_ciphers  on;

      apache服务器:

      注意:apache和openssl套件版本过低可能会导致无法启用新型加密套件和算法,请升级最新版本。

      (openssl1.0.1+版本支持TLS1.1和TLS1.2协议)

      apache2.X版本:

      SSLProtocol  all -SSLv2 -SSLv3

      SSLCipherSuite ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL

      SSLHonorCipherOrder on

      Tomcat服务器:

      JDK版本过低也会带来不安全漏洞,请升级JDK为最新版本。升级JDK风险请安按照系统升级风险酌情考虑。

      (先备份再配置,低版本的配置后有启动不了的风险,请升级tomcat和jdk版本,JDK1.7及以上支持TLS1.2协议)

      maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

      keystoreFile="keystore/domain.jks"  keystorePass="证书密码"

      clientAuth="false" sslProtocol="TLS"

      ciphers="TLS_RSA_WITH_AES_128_GCM_SHA256,

      TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,

      TLS_RSA_WITH_AES_128_CBC_SHA,

      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,

      TLS_RSA_WITH_AES_128_CBC_SHA256,

      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,

      SSL_RSA_WITH_3DES_EDE_CBC_SHA,

                              TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" />

      使用apr的tomcat(windows环境路径请使用“\”,证书文件是for apache压缩包中的三个文件)

      maxThreads="150"

      protocol="org.apache.coyote.http11.Http11AprProtocol"

      enableLookups="false" disableUploadTimeout="true"

      acceptCount="100" scheme="https" secure="true"

      SSLEnabled="true"

      SSLProtocol="all -SSLv2 -SSLv3"

      SSLCertificateFile="conf/domian.com.crt"

      SSLCertificateKeyFile="conf/domian.com.key"

      SSLCertificateChainFile="conf/root_bundle.crt"

                     SSLCipherSuite="ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL" />

      关于oracle数据库加密的函数

      Oracle 提供两种加密方式:
      a)加密 API 例如包 和 dbms_crypto 使用这些包,可以构建我们自己的基础架构,对数据进行加密。 这种方法的灵活性最强,但是构建和管理却相当复杂。
      b)透明的数据加密是 Oracle 数据库 ;使用该特性后,就不必手动进行密码管理了。
      数据库管理密码,但是正如名称所指,加密是透明的——数据仅仅以加密的方式存储而已。在Oracle10g中出现了dbms_crypto替代了之前的dbms_obfuscation_toolkit,DBMS_CRYPTO增加了若干新的加密算法、哈希算法。
      DBMS_CRYPTO还撤销了对于public组的执行权限。

      关于oracle数据库加密的函数

      Oracle 提供两种加密方式:
      a)加密 API 例如包 和 dbms_crypto 使用这些包,可以构建我们自己的基础架构,对数据进行加密。 这种方法的灵活性最强,但是构建和管理却相当复杂。
      b)透明的数据加密是 Oracle 数据库 ;使用该特性后,就不必手动进行密码管理了。
      数据库管理密码,但是正如名称所指,加密是透明的——数据仅仅以加密的方式存储而已。在Oracle10g中出现了dbms_crypto替代了之前的dbms_obfuscation_toolkit,DBMS_CRYPTO增加了若干新的加密算法、哈希算法。
      DBMS_CRYPTO还撤销了对于public组的执行权限。

      如何在oracle 10g r2中实现透明数据加密

      通过使用wallet 对数据加密,物理上对数据文件中的数据进行加密。

      工作过程:

      当用户插入数据到需要加密的列中的时候,Oracle 10g从钱夹中获取master密钥,用master密钥解密数据字典中的表密钥,然后用解密后的表密钥加密输入数据,再将加密后的数据保存在数据库中。

      当用户查询一个加密列的时候,Oracle 将加密的表密钥从数据字典中取出,再取出master密钥,然后解密表密钥,再用解密后的表密钥来解密磁盘上加密的数据,最后返回明文给用户。

      所有操作对用户而言是透明的。

      技术分享
      1.  创建钱包

      sqlplus中查看,文件路径和查询中的一致
      1. SQL> SELECT * FROM V$ENCRYPTION_WALLET;
      2. WRL_TYPE WRL_PARAMETER STATUS
      3. -------------------- ------------------------------------------------------------ ------------------
      4. file /oracle/app/oracle/admin/PROD/wallet CLOSED

      默认是关闭的,修改sqlnet.ora文件,wallet不存在,创建一下
      1. mkdir -p /oracle/app/oracle/admin/PROD/wallet

      1. ENCRYPTION_WALLET_LOCATION=
      2. (SOURCE=
      3. (METHOD=FILE)
      4. (METHOD_DATA=
      5. (DIRECTORY=/oracle/app/oracle/admin/wallet)))


       创建wallet
      1. SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "oracle";
      2. System altered.
      3. SQL> col WRL_PARAMETER for a60
      4. SQL> set line 200
      5. SQL> SELECT * FROM V$ENCRYPTION_WALLET;
      6. WRL_TYPE WRL_PARAMETER STATUS
      7. -------------------- ------------------------------------------------------------ ------------------
      8. file /oracle/app/oracle/admin/PROD/wallet OPEN

      1. PROD@localhost.localdomain /oracle/app/oracle/admin/PROD/wallet$ ll
      2. total 4
      3. -rw-r--r-- 1 oracle oinstall 2845 Jul 9 06:43 ewallet.p12
      4. PROD@localhost.localdomain /oracle/app/oracle/admin/PROD/wallet$


      2.透明列级加密
      1. -- 不能对 sys用户的表加密
      2. SQL> conn hxy/hxyConnected.

      3. CREATE TABLE cust_payment_info
      4. (first_name VARCHAR2(11),
      5. last_name VARCHAR2(10),
      6. order_number NUMBER(5),
      7. credit_card_number VARCHAR2(16) ENCRYPT NO SALT,
      8. active_card VARCHAR2(3));

      1. INSERT INTO cust_payment_info VALUES
      2. (‘Jon‘, ‘Oldfield‘, 10001, ‘5446959708812985‘,‘YES‘);
      3. INSERT INTO cust_payment_info VALUES
      4. (‘Chris‘, ‘White‘, 10002, ‘5122358046082560‘,‘YES‘);
      5. INSERT INTO cust_payment_info VALUES
      6. (‘Alan‘, ‘Squire‘, 10003, ‘5595968943757920‘,‘YES‘);
      7. INSERT INTO cust_payment_info VALUES
      8. (‘Mike‘, ‘Anderson‘, 10004, ‘4929889576357400‘,‘YES‘);
      9. INSERT INTO cust_payment_info VALUES
      10. (‘Annie‘, ‘Schmidt‘, 10005, ‘4556988708236902‘,‘YES‘);
      11. INSERT INTO cust_payment_info VALUES
      12. (‘Elliott‘, ‘Meyer‘, 10006, ‘374366599711820‘,‘YES‘);
      13. INSERT INTO cust_payment_info VALUES
      14. (‘Celine‘, ‘Smith‘, 10007, ‘4716898533036‘,‘YES‘);
      15. INSERT INTO cust_payment_info VALUES
      16. (‘Steve‘, ‘Haslam‘, 10008, ‘340975900376858‘,‘YES‘);
      17. INSERT INTO cust_payment_info VALUES
      18. (‘Albert‘, ‘Einstein‘, 10009, ‘310654305412389‘,‘YES‘);

      1. SQL> select * from cust_payment_info
      2. 2 ;
      3. FIRST_NAME LAST_NAME ORDER_NUMBER CREDIT_CARD_NUMB ACT
      4. ----------- ---------- ------------ ---------------- ---
      5. Chris White 10002 5122358046082560 YES
      6. Alan Squire 10003 5595968943757920 YES
      7. Mike Anderson 10004 4929889576357400 YES
      8. Annie Schmidt 10005 4556988708236902 YES
      9. Elliott Meyer 10006 374366599711820 YES
      10. Celine Smith 10007 4716898533036 YES
      11. Steve Haslam 10008 340975900376858 YES
      12. Albert Einstein 10009 310654305412389 YES
      13. 8 rows selected.


      关闭钱包,则无法访问
      1. SQL> ALTER SYSTEM SET ENCRYPTION WALLET close identified by oracle;
      2. System altered.
      3. SQL> conn hxy/hxy
      4. Connected.
      5. SQL> select * from cust_payment_info;
      6. select * from cust_payment_info
      7. *
      8. ERROR at line 1:
      9. ORA-28365: wallet is not open


      3. 透明表空间加密 (表空间上所有的数据都加密)
      1. SQL> CREATE TABLESPACE securespace
      2. 2 DATAFILE ‘/home/oracle/oracle3/product/11.1.0/db_1/secure01.dbf‘
      3. 3 SIZE 150M
      4. 4 ENCRYPTION
      5. 5 DEFAULT STORAGE(ENCRYPT);
      6. Tablespace created.

      1. SQL> CREATE TABLE customer_payment_info
      2. 2 (first_name VARCHAR2(11),
      3. 3 last_name VARCHAR2(10),
      4. 4 order_number NUMBER(5),
      5. 5 credit_card_number VARCHAR2(16),
      6. 6 active_card VARCHAR2(3))TABLESPACE securespace;
      7. Table created.

      4. 删除了操作系统的加密文件
      执行下面的命令,输入原来的密码会生成一个.p12文件
      1. PROD@localhost.localdomain /oracle/app/oracle/product/11.2.0/network/admin$ mkstore -wrl /oracle/app/oracle/product/11.2.0/network/admin/wallet/ -list
      2. Oracle Secret Store Tool : Version 11.2.0.4.0 - Production
      3. Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
      4. Enter wallet password:
      5. Oracle Secret Store entries:
      6. ORACLE.SECURITY.DB.ENCRYPTION.ARMxdklw5k9zv9UpvDKPCDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
      7. ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY

      8. PROD@localhost.localdomain /oracle/app/oracle/product/11.2.0/network/admin/wallet$ ll
      9. total 4
      10. -rw-r--r-- 1 oracle oinstall 2581 Jul 9 08:35 ewallet.p12

      参考:



      来自为知笔记(Wiz)

      oracle加密--wallet

      标签:cat   表空间   lte   过程   parent   word   查看   text   arch   

      如何在oracle 10g r2中实现透明数据加密

      通过使用wallet 对数据加密,物理上对数据文件中的数据进行加密。

      工作过程:

      当用户插入数据到需要加密的列中的时候,Oracle 10g从钱夹中获取master密钥,用master密钥解密数据字典中的表密钥,然后用解密后的表密钥加密输入数据,再将加密后的数据保存在数据库中。

      当用户查询一个加密列的时候,Oracle 将加密的表密钥从数据字典中取出,再取出master密钥,然后解密表密钥,再用解密后的表密钥来解密磁盘上加密的数据,最后返回明文给用户。

      所有操作对用户而言是透明的。

      技术分享
      1.  创建钱包

      sqlplus中查看,文件路径和查询中的一致
      1. SQL> SELECT * FROM V$ENCRYPTION_WALLET;
      2. WRL_TYPE WRL_PARAMETER STATUS
      3. -------------------- ------------------------------------------------------------ ------------------
      4. file /oracle/app/oracle/admin/PROD/wallet CLOSED

      默认是关闭的,修改sqlnet.ora文件,wallet不存在,创建一下
      1. mkdir -p /oracle/app/oracle/admin/PROD/wallet

      1. ENCRYPTION_WALLET_LOCATION=
      2. (SOURCE=
      3. (METHOD=FILE)
      4. (METHOD_DATA=
      5. (DIRECTORY=/oracle/app/oracle/admin/wallet)))


       创建wallet
      1. SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "oracle";
      2. System altered.
      3. SQL> col WRL_PARAMETER for a60
      4. SQL> set line 200
      5. SQL> SELECT * FROM V$ENCRYPTION_WALLET;
      6. WRL_TYPE WRL_PARAMETER STATUS
      7. -------------------- ------------------------------------------------------------ ------------------
      8. file /oracle/app/oracle/admin/PROD/wallet OPEN

      1. PROD@localhost.localdomain /oracle/app/oracle/admin/PROD/wallet$ ll
      2. total 4
      3. -rw-r--r-- 1 oracle oinstall 2845 Jul 9 06:43 ewallet.p12
      4. PROD@localhost.localdomain /oracle/app/oracle/admin/PROD/wallet$


      2.透明列级加密
      1. -- 不能对 sys用户的表加密
      2. SQL> conn hxy/hxyConnected.

      3. CREATE TABLE cust_payment_info
      4. (first_name VARCHAR2(11),
      5. last_name VARCHAR2(10),
      6. order_number NUMBER(5),
      7. credit_card_number VARCHAR2(16) ENCRYPT NO SALT,
      8. active_card VARCHAR2(3));

      1. INSERT INTO cust_payment_info VALUES
      2. (‘Jon‘, ‘Oldfield‘, 10001, ‘5446959708812985‘,‘YES‘);
      3. INSERT INTO cust_payment_info VALUES
      4. (‘Chris‘, ‘White‘, 10002, ‘5122358046082560‘,‘YES‘);
      5. INSERT INTO cust_payment_info VALUES
      6. (‘Alan‘, ‘Squire‘, 10003, ‘5595968943757920‘,‘YES‘);
      7. INSERT INTO cust_payment_info VALUES
      8. (‘Mike‘, ‘Anderson‘, 10004, ‘4929889576357400‘,‘YES‘);
      9. INSERT INTO cust_payment_info VALUES
      10. (‘Annie‘, ‘Schmidt‘, 10005, ‘4556988708236902‘,‘YES‘);
      11. INSERT INTO cust_payment_info VALUES
      12. (‘Elliott‘, ‘Meyer‘, 10006, ‘374366599711820‘,‘YES‘);
      13. INSERT INTO cust_payment_info VALUES
      14. (‘Celine‘, ‘Smith‘, 10007, ‘4716898533036‘,‘YES‘);
      15. INSERT INTO cust_payment_info VALUES
      16. (‘Steve‘, ‘Haslam‘, 10008, ‘340975900376858‘,‘YES‘);
      17. INSERT INTO cust_payment_info VALUES
      18. (‘Albert‘, ‘Einstein‘, 10009, ‘310654305412389‘,‘YES‘);

      1. SQL> select * from cust_payment_info
      2. 2 ;
      3. FIRST_NAME LAST_NAME ORDER_NUMBER CREDIT_CARD_NUMB ACT
      4. ----------- ---------- ------------ ---------------- ---
      5. Chris White 10002 5122358046082560 YES
      6. Alan Squire 10003 5595968943757920 YES
      7. Mike Anderson 10004 4929889576357400 YES
      8. Annie Schmidt 10005 4556988708236902 YES
      9. Elliott Meyer 10006 374366599711820 YES
      10. Celine Smith 10007 4716898533036 YES
      11. Steve Haslam 10008 340975900376858 YES
      12. Albert Einstein 10009 310654305412389 YES
      13. 8 rows selected.


      关闭钱包,则无法访问
      1. SQL> ALTER SYSTEM SET ENCRYPTION WALLET close identified by oracle;
      2. System altered.
      3. SQL> conn hxy/hxy
      4. Connected.
      5. SQL> select * from cust_payment_info;
      6. select * from cust_payment_info
      7. *
      8. ERROR at line 1:
      9. ORA-28365: wallet is not open


      3. 透明表空间加密 (表空间上所有的数据都加密)
      1. SQL> CREATE TABLESPACE securespace
      2. 2 DATAFILE ‘/home/oracle/oracle3/product/11.1.0/db_1/secure01.dbf‘
      3. 3 SIZE 150M
      4. 4 ENCRYPTION
      5. 5 DEFAULT STORAGE(ENCRYPT);
      6. Tablespace created.

      1. SQL> CREATE TABLE customer_payment_info
      2. 2 (first_name VARCHAR2(11),
      3. 3 last_name VARCHAR2(10),
      4. 4 order_number NUMBER(5),
      5. 5 credit_card_number VARCHAR2(16),
      6. 6 active_card VARCHAR2(3))TABLESPACE securespace;
      7. Table created.

      4. 删除了操作系统的加密文件
      执行下面的命令,输入原来的密码会生成一个.p12文件
      1. PROD@localhost.localdomain /oracle/app/oracle/product/11.2.0/network/admin$ mkstore -wrl /oracle/app/oracle/product/11.2.0/network/admin/wallet/ -list
      2. Oracle Secret Store Tool : Version 11.2.0.4.0 - Production
      3. Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
      4. Enter wallet password:
      5. Oracle Secret Store entries:
      6. ORACLE.SECURITY.DB.ENCRYPTION.ARMxdklw5k9zv9UpvDKPCDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
      7. ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY

      8. PROD@localhost.localdomain /oracle/app/oracle/product/11.2.0/network/admin/wallet$ ll
      9. total 4
      10. -rw-r--r-- 1 oracle oinstall 2581 Jul 9 08:35 ewallet.p12

      参考:



      来自为知笔记(Wiz)

      oracle加密--wallet

      标签:cat   表空间   lte   过程   parent   word   查看   text   arch   

      oracle 字段加密

      这个主要看软件开发人员的加密方式

      一般流程是,

      1.新建用户,或者修改密码时候,将用户输入的密码按照一定的加密方式加密后储存在数据库

      2.在用户登录的时候,将用户所输入的密码再次进行加密后与数据库内的加密密码对比

      这样做的好处是,防止密码在网络传输过程中被截取,比如黑客可以对网络传输的数据进行抓包分析,对于加密的密码在传输过程中不是以明文进行传输,如果被窃取到数据,不能得到有效破解,也是没有用的,这就增加了可靠性。追问知道上面使用的是什么加密方式吗?好像不是MD5

      追答这很难看出来,要是直接看出来了,那加密就没意义了

      你有没有程序的源代码?有源代码进行分析一下就知道了

      oracle的加密包,dbms_crypto的用法怎么用,我是一个初学者,对oracle编程不明白,求大神解答!

      加密类型:DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5

      盐值/Key值/密钥:1q2wa3es4rz5tx6ycD*UF8tif9ogjen2

      你把解密的结合起来看看就知道所以然了。追问如果我要学习这个,有没有推荐的课程给我看看,我现在怎么看怎么不明白呢

      追答这属于存储过程/函数,看Oracle文档的参数说明即可,上官网搜。

      显示全文