信任特权用户,DBMS_SQLHASH和关于加密的三个误解

客户经常联系Intifigy请求援助以保护其敏感数据。通常,这些都是帮助定位的请求,然后加密敏感数据。加密时 提供对敏感数据的保护,绝不能解决所有安全问题。如何保护敏感数据(以及如何验证具有敏感数据的数据库管理员等特权用户的信任)不仅仅是加密。

Oracle数据库安全指南(对于对​​Oracle数据库安全性感兴趣的任何人进行了很好的阅读)在第八章关于加密中的三个关键点:

  1. 加密不解决访问控制问题 - 具有在数据库中访问数据的权限的用户没有更多,而不是加密的权限
  2. 加密不会防范恶意数据库管理员 - 如果不值得信任的用户有重大权限,那么他们可以对组织构成多种威胁,其中一些比观看未加密的信用卡号更重要
  3. 加密所有内容都不会使数据安全 - 数据必须在需要时提供,并且考虑备份和DR解决方案。此外,加密所有数据会显着影响性能。
     

dbms_sqlhash.

除了加密之外,Oracle提供的安全工具之一是DBMS_SQLHASH包。哈希值类似于数据指纹,可用于验证数据是否已被更改(称为数据完整性)。散列与加密不同,了解差异很重要。如果您需要了解有关散列的更多信息,请参阅下面的参考部分。 

The dbms_sqlhash. package has been delivered since 10g and provides an interface to generate the hash value of the result set returned by a SQL query and provides support for several industry-standard hashing algorithms including SHA-1.

dbms_sqlhash.gethash(varchar2中的sqltext,

                                               binary_integer中的digest_type,

                                               数量默认为134217728)

 

SQL.Text.

结果是散列的SQL语句

digest_type.

使用的哈希算法:hash_md4,hash_md5或hash_sh1

使用3 for hash_sh1,对于hash_md5和1 for hash_md4使用2

chunk_size.

获得哈希时结果块的大小

当结果集大小很大时,Gethash函数会将其分解为尺寸等于Chunk_size的块。它将为每个块生成哈希,然后使用哈希链接来计算最终哈希。默认chunk_size为128 MB。

 

审计师如何使用dbms_sqlhash

DBMS_SQLHash的一个用例是帮助审核员信任 - 但验证特权用户(如数据库管理员)的操作。通过散列密钥表审计员可以快速确定数据库管理员是否已更改 - 授权或未授权。审计员可以通过在审计期间录制哈希来实现这一点,以便在期间结束时进行比较。如果审计期末的哈希在期间开始与哈希相匹配,则没有进行任何变化。如果有大量的数据库和/或表来审核,则这种方法是一种非常有益的方法,可以识别需要额外的审查 - 假设已配置足够的日志记录以捕获更改的细节。

例如,为了确定Oracle数据库用户及其关联的权限是否已经发生了更改,例如授予对敏感数据的访问,审计员可以散列以下字典表:

  • sys.dba_users.
  • sys.dba_roles.
  • sys.dba_tab_privs.
  • sys.dba_sys_privs.
  • sys.dba_role_privs.

例子

注意:要调用sys.dbms_sqlhash包,则用户将需要从sys授予的执行权限。

控制

dba_users.

SQL.

选择sys.dbms_sqlhash.gethash('从sys.dba_users命令按user_id',3)sh1_dba_user_hash from;

样本

结果

sh1_dba_user_hash.

7BD61E22E35FA2F95035E6A794F5B8CF0E37FDF6

 

控制

sys.dba_roles.

SQL.

选择sys.dbms_sqlhash.gethash('从sys.dba_roles按角色选择*,3)sh1_dba_roles_hash from dual;

样本

结果

sh1_dba_roles_hash.

C80D69048D613E926E95AF77B627D9B5D6CB20C8

 

控制

sys.dba_tab_privs.

SQL.

选择sys.dbms_sqlhash.gethash('从sys.dba_tab_privs顺序选择* bywore,table_name',3)sh1_dba_tab_privs_hash. frual;

样本

结果

sh1_dba_tab_privs_hash.

53FBDBDBF95186400A4DEEE611F51CD0B1E998DF

 

控制

sys.dba_sys_privs.

SQL.

选择sys.dbms_sqlhash.gethash('从sys.dba_sys_privs顺序按bateree,privilege',3)sh1_dba_sys_privs_hash. from;

样本

结果

sh1_dba_sys_privs_hash.

A27E8C71AD0CAEFB94AFEAB5DB108871F09BC281

 

控制

sys.dba_role_privs.

SQL.

选择sys.dbms_sqlhash.gethash('从sys.dba_role_privs订单按branteee,granted_role',3)sh1_dba_role_privs_hash. frual;

样本

结果

sh1_dba_role_privs_hash.

5715D1B2C2A775D579B36DEBD2C2F1F608762AEC.

 

关键点

订单BY子句将改变哈希。 Oracle支持注释1569256.1更详细地解释了这一点。 为了保证在不同时间发布的SQL的相同哈希,必须使用相同的数据排序。

如果您对Oracle和Oracle E-Business Suite有疑问或对积分的散列方法感兴趣,请联系我们 [email protected]

参考

 Share this post

订阅RSS.

将我们添加到您最喜欢的新闻读者。

在推特上关注

获取最新的更新。