数据库连接查找不到数据库_查找具有受保护的健康信息的数据库
数据库连接查找不到数据库
PII和PHI数据收集和存储正在扩展
身份盗用已经是金融业中的一个众所周知的问题,公司正在努力采取措施,尽其所能。 目前与医疗相关的欺诈行为尚处于萌芽状态(目前不到报告的医疗保健违规事件的5%),但是随着政府刺激资金扩大电子医疗记录的使用,医疗保健欺诈行为的增长将继续加速。 当发生身份泄露和医疗盗窃时,它们这样做是因为对组织有价值的大多数信息系统都包含某种程度的个人身份信息 (PII)或受保护的健康信息 (PHI)。 PII和PHI是关于人的最私人的数据存储,如果被破坏或被盗,它们会导致不良事件,例如身份盗窃或医疗欺诈。 例如,国防部,退伍军人事务部,PII和PHI的处理者(例如保险或个人投资公司)以及雇主(例如旅馆连锁店)都报告了PII和PHI数据的重大损失,在某些情况下,多达2500万条记录。 保护信息并非易事,但至关重要。
PII通常定义为可以单独使用或与任何其他信息结合使用以标识特定个人的任何名称或号码。 它通常是一个人的名字,与以下一项或多项信息结合使用:驾驶执照号,州身份证号,社会保险号,帐号,信用卡号或借记卡号。
PHI(定义为将人与健康状况相关联的任何信息)稍微复杂一些。 《健康保险携带与责任法案》(HIPAA)定义了18个官方标识符,它们分为以下几类:
- 名字
- 日期
- 号码
- 地址
- 图形
如果所有这些组或标识符被删除或以某种方式加密,则该信息将被取消标识或匿名化,并且不再被视为PHI。 政府法规(例如HIPAA)中定义的18种数据的特定列表包括:
- 名字
- 所有小于该州的地理分区,包括:街道地址,城市,县,辖区,邮政编码及其等效的地理代码,但根据国家统计局最新的公开数据,邮政编码的前3位除外人口普查:
- 通过将所有邮政编码与相同的三个初始数字组合而成的地理单位包含20,000多人。
- 所有这样的包含20,000个或更少人数的地理单位的邮政编码的前三位数字更改为000。根据2002年8月对隐私权规则的最终修改并利用2000年人口普查数据,有17个受限制的三位邮政编码对应于20,000以下的人口,必须更改为000才能取消识别:036、059、063、102、203、556、692、790、821、823、830、831、878、879、884 ,890和893。
- 与个人直接相关的日期的所有日期(年份除外)元素,包括出生日期,入院日期,出院日期和死亡日期。 所有89岁以上的年龄以及指示该年龄的日期(包括年份)的所有元素,但可以将这些年龄和元素汇总为90岁或以上的单一类别。
- 电话号码
- 传真号码
- 电子邮件地址
- 社会安全号码
- 病历号
- 健康计划受益人编号
- 帐号
- 证书或许可证号
- 车辆标识符和序列号(包括车牌)
- 设备标识符和序列号
- 网址
- IP地址
- 生物识别符,例如指纹和声纹
- 全脸照片和任何可比较的图像
- 其他任何唯一的标识号,特征或代码
PHI以不同的形式出现:纸质或纸质记录,电子记录以及语言和手语交流。 保护纸质记录和口头交流更容易,因为我们使用和保护这些类型的记录已有数百年的历史,并且通常我们很擅长。 电子通信的历史不到60年,大多数健康数据的历史还不到30年,因此我们才刚刚开始了解如何保护它。 与被盗的纸质记录难以复制和散发和耗时不同,被盗的电子记录易于分发。 因此,本文着重于查找和保护电子记录。
保护PII机密性的指南
标准与技术研究院(NIST)发布SP 800-122全国学院,“指南保护个人身份信息的保密性(PII)”(见相关信息 )可帮助您了解最自由和公正的资源之一是什么隐私数据是以及您如何保护它。 最初创建该文档是为了帮助联邦组织识别PII并确定每种情况所需的保护级别,该文档同样适用于商业和非营利组织。 它建议什么是针对PII的适当保护和保障以及如何处理数据泄露。 尽管重点放在PII上,但它也可以为您自己的隐私和安全计划提供PHI支持。
为了保护隐私数据,您需要知道它在哪里
您知道需要保护驻留在数据库中的PII和PHI。 您还知道传输中的加密是保护私有数据的最低要求。 但是,应加密和保护哪些数据? 将所有内容都声明为私有是不明智的,因为数据安全成本很高。
保护大型企业数据库非常简单-至少您知道数据在哪里。 困难的任务是如何处理数十个(也许是数百个)Lotus®Notes®文档以及Microsoft®Word,Access®和Excel®文件。 尽管可以将这些文档视为简单的文件管理问题,但它们不只是这些,它们是真实的应用程序和真实的数据库。 对与规模较大的组织中的患者信息有关的HIPAA隐私问题进行任何合理的分析,都可能发现成千上万的Microsoft Word,Access和Excel文件以及需要保护的健康数据。
敏感数据发现
本文介绍了一些数据发现(清单)机制,以帮助识别可能驻留在可以通过JDBC或ODBC连接的任何数据源中的PII和PHI。 基本方法如下:
- 查看表,列和其他架构对象名称,以查看它们是否与已知模式匹配,并假定所有匹配的对象都具有PII或PHI数据。
- 查看实际SQL或正在执行的查询,以扫描SQL数据查询语言(DQL)或生成的结果。
- 使用字符串或模式匹配来查看数据库或文件中的静态数据,以查找特定单词,例如“
do not distribute
,“confidential
,\d{3}\-\d{2}\-\d{4}
(SSN)和标志他们。 - 查看使用类似匹配模式通过防火墙或代理传输的所有内容。
如何将数据分类为敏感数据或私有数据
有许多技术可以对数据进行分类,但是它们要么:
- 确定性地匹配实际数据或定义数据的元数据中的特定关键字或模式。
- 在算法上使用具有分类或其他分类,自然语言分析,贝叶斯推断或统计分析的文档聚类。
算法机制超出了本文的范围,但是您会发现匹配元数据中的关键字并不困难。
自动发现JDBC或ODBC数据源中的PII或PHI列
几乎所有流行的关系数据库都可以通过JDBC直接访问; 可通过JDBC-ODBC桥访问Microsoft Office文档(如Access或Excel)。 通过使用桥模型或直接JDBC以及JDBC java.sql.DatabaseMetaData
类,可以快速扫描数据库列,表和其他架构对象,从而满足您的所有需求。 将其包装到Ant任务中,您将拥有一个可重用的命令行工具,可以在连接到任何数据库的任何平台上使用。
定义过滤器文件
定义一个文本文件,其中包含要查找的不同正则表达式的列表。 将其称为过滤器列表。 您可以创建一个名为filters.txt的文件(有关文件,请参见下载 ),它可以从清单1所示的模式开始。 您将需要扩展文件,以便它具有所有特定规则。
清单1.filters.txt包含示例正则表达式,这些正则表达式标识了要定位的模式
^.*(ssn|social|security).*$
^.*name.*$
^.*address.*$
^.*city.*$
^.*state.*$
^.*zip.*$
^.*county.*$
^.*precinct.*$
^.*(email|e-mail|mail).*$
使用Ant任务
商业和开源扫描工具
其他几种开源和商业扫描工具从相似的功能开始,但增加了更多功能。 当您寻找第三方工具时,请考虑自动发现(该工具会自动查找数据库并使用PII / PHI记录源),可配置模板(您添加自己的规则),覆盖面广(涵盖了所有文件,数据库和网络传输) ),内容扫描和审核。
要使用Ant任务,您将需要创建一个Ant Project文件(请参见清单2 )。 请注意,您将使用先前定义的filters.txt文件。 您可以根据需要在所有不同的数据库,Access和Excel文档以及其他文件中搜索任意数量的<scanner>
标记。 Ant的全部功能可用于使用变量,脚本等。
清单2. Scanner.xml-描述JDBC连接和选项的Ant项目文件
<?xml version="1.0" encoding="utf-8"?>
<project id="PII and PHI Scanner"><taskdef name="scanner" classname="PrivacyDataScanner"/><scanner catalog="" schemaPattern=""filtersFile="filters.txt"output="database-one-scanner-output.txt"driver="com.ibm.db2.jcc.DB2Driver"url="jdbc:db2://HOST:5702/INSTANCE"userid="USER_ID"password="PA$$WORD"></scanner><scanner scanner catalog="" schemaPattern=""filtersFile="filters.txt"output="database-two-scanner-output.txt"driver="com.ibm.db2.jcc.DB2Driver"url="jdbc:db2://HOST:5702/INSTANCE2"userid="USER_ID2"password="PA$$WORD2"></scanner>
</project>
如果要搜索其他数据库或文档,只需在Ant项目文件中添加其他<scanner>
部分。 我建议将所有不同的数据库连接添加到一个文件中,或者按系统或部门将不同的数据库分组到单独的文件中。 请记住,您可以使用JDBC-ODBC桥来扫描Microsoft Access或Excel文档。
Ant任务Java源(PrivacyDataScannerTask.java)
您可以将隐私数据扫描程序代码编写为命令行Java程序,或使用各种其他技术使其可编写脚本。 但是,如果将隐私扫描程序代码作为Ant任务编写,则很容易注入到构建自动化和其他脚本中,并且在使用Ant的项目中更可重用(请参见清单3 )。 因为您的代码将使用JDBC,所以扩展内置的Ant任务类org.apache.tools.ant.taskdefs.JDBCTask
是有意义的。
清单3. PrivacyDataScannerTask.java,第1部分:import语句
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.JDBCTask;import java.io.*;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
请注意,您使用Ant来导入这些类,并且在CLASSPATH中将需要Ant 1.6或更高版本(请参见清单4 )。
清单4. PrivacyDataScannerTask.java,第2部分:类头和设置器
public class PrivacyDataScannerTask extends JDBCTask {// inherits attributes and setters for JDBC connection parametersprivate String catalog;private String schemaPattern;private File output;private File filtersFile;private List<String> filters = new ArrayList<String>();public void setCatalog(final String catalog) {this.catalog = catalog;}public void setSchemaPattern(final String schemaPattern) {this.schemaPattern = schemaPattern;}public void setOutput(final File output) {this.output = output;}public void setFiltersFile(final File filtersFile) throws IOException {this.filtersFile = filtersFile;final FileReader fileReader = new FileReader(filtersFile);final BufferedReader bufferedReader = new BufferedReader(fileReader);String line = null;while ((line = bufferedReader.readLine()) != null)filters.add(line);bufferedReader.close();}
您的任务正在扩展内置的Ant Task( JDBCTask
),它将自动继承所有JDBC连接设置属性。 当项目引用清单5中所示的<scanner>
标记中的XML属性时,Ant会自动调用setCatalog
, setSchemaPattern
, setOutput
和setFiltersFile
。
清单5. PrivacyDataScannerTask.java,第3部分:实际执行PII或PHI检查的方法
public String isPIIOrPHI(final String text) {for (final String regex : filters) {if (text.matches(regex)) return regex;}return null;}
匹配表名,列名和其他模式对象的实际工作是通过这种方法来完成的。 现在,您只需检查传入的文本(将成为列或表的名称)是否符合我们的规则。 规则在清单1的 filter.txt中定义,并在清单4的setFiltersFile
方法中读取。
当然,如果您有其他方法来指定过滤器,例如从HTTP服务获取过滤器或从中央数据库检索过滤器,则可以修改此方法以使用规则源和业务规则(请参见清单6 )。
清单6. PrivacyDataScannerTask.java,第4部分:执行实际扫描的主要 Ant方法。
public void execute() throws BuildException {final Writer analysis = new StringWriter();final Connection conn = getConnection();try {final DatabaseMetaData dbmd = conn.getMetaData();analysis.write("** Privacy Analysis Scanner Output ** \n\n");analysis.write("driver: " + dbmd.getDriverName() + "\n");analysis.write("driver-version: " + dbmd.getDriverVersion() + "\n");analysis.write("product: " + dbmd.getDatabaseProductName() + "\n");analysis.write("product-version: " + dbmd.getDatabaseProductVersion() + "\n");if (catalog != null && catalog.length() > 0) {analysis.write("catalog: " + catalog + "\n");if (schemaPattern != null && schemaPattern.length() > 0) {analysis.write("schemaPattern: " + schemaPattern + "\n\n");ResultSet tables = null;try {tables = dbmd.getTables(catalog, schemaPattern, null, new String[]{"TABLE"});while (tables.next()) {final String tableName = tables.getString(3);analysis.write("table name=\"" + tableName);String matchesPII = isPIIOrPHI(tableName);if(matchesPII != null)analysis.write(", *** Contains PII or PHI: " + matchesPII+ " ***\n");elseanalysis.write("\n");ResultSet columns = null;try {columns = dbmd.getColumns(null, null, tableName, null);while (columns.next()) {final String columnName = columns.getString(4);analysis.write(" column name=\"" + columnName + "\"");analysis.write(", type=\"" + columns.getShort(5));matchesPII = isPIIOrPHI(columnName);if(matchesPII != null)analysis.write(", *** Contains PII or PHI: " + matchesPII + " ***\n");elseanalysis.write("\n");}}finally {if (columns != null) columns.close();}}}finally {tables.close();}} else {analysis.write("No 'schemaPattern' provided -- available schemas: ");ResultSet rs = null;try {rs = dbmd.getSchemas();while (rs.next()) {analysis.write(", " + rs.getObject(1).toString());}}finally {if (rs != null) rs.close();}analysis.write("\n");}} else {analysis.write("No 'catalog' provided - listing available catalogs: ");ResultSet rs = null;try {rs = dbmd.getCatalogs();while (rs.next()) {analysis.write(", " + rs.getObject(1).toString());}}finally {if (rs != null) rs.close();}analysis.write("\n");}} catch (SQLException e) {throw new BuildException(e);} catch (IOException e) {throw new BuildException(e);}// at this point we've captured the output and can e-mail or send it to// standard out; we're just going to write it out to a file for nowFileWriter out = null;try {out = new FileWriter(output);out.write(analysis.toString());} catch (IOException e) {e.printStackTrace(); }}
}
Ant任务的execute()
方法是<scanner>
标记结束时Ant项目(请参见清单2 )将调用的方法。 所有属性都将传递到清单4中定义的设置器中,然后execute
方法可以将私有成员变量用于其处理要求。
该方法首先检查是否提供了catalog
和schemaPattern
。 如果未提供catalog
或schemaPattern
,则该方法将仅列出可用的目录和模式,以便您可以修改清单2中的项目文件以选择适当的模式和目录。
如果提供了适当的catalog
和schemaPattern
,那么代码将简单地循环遍历所有表(在每个表内部遍历所有列),并使用清单5中定义的方法对每个表名和列名运行PII和PHI检查。 当该方法遍历表和列时,它将存储消息以保存到文件中。 在方法结束时,将收集消息并将其写入文件。
该解决方案只是一个开始,但是您可以看到它在进行搜索以保护隐私数据时为您节省了很多时间。
结论
在整个企业中跟踪PII和PHI至关重要。 如果您无法手动或自动扫描PII和PHI,则将面临机密信息完整性,个人信息安全性丧失(身份盗窃),潜在的知识产权盗窃,不良宣传以及代价高昂的违规通知等风险。 。 使用本文概述的技术,您可以看到创建可以库存数据库和电子表格的工作代码相对简单,因此您知道哪些数据库需要私人保护和关注。
翻译自: https://www.ibm.com/developerworks/data/library/techarticle/dm-ind-findpii/index.html
数据库连接查找不到数据库
数据库连接查找不到数据库_查找具有受保护的健康信息的数据库相关推荐
- c access mysql数据库_基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)...
基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo) 一.三种数据库的主要对比 数据库类型 特点 Microsoft Access 桌面数据库.数据库载体是单个文件 ...
- 先学python还是先学数据库_跟着销售学python8-微信平台初次见识数据库(6)
本来是计划跟着learn python the hard way ,继续下去, 不过中途补充一下,网页的基础知识吧,也不耽搁了. [摘录]:用来记下,之前不理解的 地方? 1.web.py 引入数据 ...
- sql重命名数据库_为什么要为SQL单元测试巧妙地命名数据库对象
sql重命名数据库 This article is focussed on clever database object naming from both development and SQL un ...
- azure云数据库_如何使用SQL Data Sync同步Azure SQL数据库和本地数据库
azure云数据库 SQL Data Sync allows you to synchronize data across multiple Azure SQL databases and on-pr ...
- python如何使用本地数据库_使用Python在虚拟机上怎么连接本地数据库
首先保证你的虚拟机和本机网络是处于同一网段的(一个局域网内), 然后明确数据库所占用的端口, 数据库账户密码就可以链接上了! python中把一个数据库对应的表封装成类就很好操作了! mysql的话: ...
- 提交表单到mysql数据库_记录第一次实现表单数据提交到数据库
经过几周的Web前端学习我初步对.html文件.php文件有了一定的了解.首先我们来复习一下学过的知识. HTML页面实际上就是静态的网页页面,我们可以用html+css(层叠样式表)来创作出具有不 ...
- 字符串查找字符出现次数_查找字符串作为子序列出现的次数
字符串查找字符出现次数 Description: 描述: It's a popular interview question based of dynamic programming which ha ...
- java流写入数据库_成为Java流大师–第4部分:数据库流
java流写入数据库 SQL一直是一种声明性语言,而Java长期以来势在必行. Java流改变了游戏规则. 通过本动手文章编写您的方式,并学习如何使用Java流对RDBMS数据库执行声明性查询,而无需 ...
- java日期存入数据库_怎样在Java中将日期转化插入到数据库
展开全部 Java中将e5a48de588b662616964757a686964616f31333339653664日期转化插入到数据库: public static Date dateTimeSt ...
最新文章
- javaScript设计模式---(单例模式学习)
- 从零开始入门 K8s| K8s 的应用编排与管理
- 其实我们不需要那么大的房子
- 合并两个无序数组java_88. 合并两个有序数组
- modprobe: FATAL: Module xxx.ko not found in directory /lib/modules/$(uname -r)
- 手风琴案例jquery写法
- Android Killer
- 1gb 云服务器 和2gb的区别_(12)虚拟主机/VPS/云主机/服务器有什么区别?
- 分析JQ作者的类实现过程
- 《HTML CSS设计与构建网站》书评之-异类的风格,不一样的效果
- 基于YOLO v5 的AI眼诊
- 李涛专家主讲PS高手之路经典视频教程(1G打包下载)
- linux下无线网卡做热点,用ArchLinux做wifi热点无线路由
- 麒麟子Javascript游戏编程零基础教程六:Javascript中的实数类型number
- html新闻公告滚动效果,好用的滚动公告HTML代码
- 软件测试需求分析方法有哪些,一起来看看吧
- qrcode(3):jquery-qrcode生成二维码
- 用开源博客系统OneBlog来搭建自己的个人技术博客网站(java版博客系统)
- 改变自己—兄弟连IT教育
- 想跳槽却简历石沉大海?一起来围观月薪20k的软件测试工程师真实简历 (含金量高面试题)
热门文章
- Directx11进阶教程PBR(3)之IBL
- 天源财富:“星际访客”和太阳系彗星中探测到镍
- 基于局部均方差的人脸磨皮matlab程序
- 蓝桥杯 Python 练习题 数字游戏
- 近期基金有所上涨,你的基金回本了吗?如果回本了,你还会继续持仓吗?
- 基于Android的学生管理系统的设计与实现
- “源”来是你-Vol.33 | 浙江大应科技 Aloudata 招聘开源社区运营
- 布隆过滤器(Bloom Filter)
- Python基础01
- 拼多多Temu出海项目正式上线,教你如何做好测评补单,分得第一杯羹