数据治理需要面临和解决的最重要的问题是,企业这么多的数据库,每个数据库这么多的表,每个表这么多的字段,如何进行信息资产的分类分级。

通过以下方法,可以自动的取企业所有数据库、所有表、所有字段,根据字段的值,利用正则表达式等方式判断此字段是否属于用户敏感信息,如姓名、手机、地址、身份证等。

最终形成数据的风险地图,库、表、字段、敏感类型和等级,可以为统一加解密、统一日志等提供服务。

#coding:utf-8'''
author:Eleven
Python3
'''import pymysql
import re# 通过正则匹配出个人敏感信息,如姓名、手机号码、地址、身份证号码、银行卡号
def check_secret(value):phone_pattern = '^((13[0-9])|(14[5,7,9])|(15[^4])|(18[0-9])|(17[0,1,3,5,6,7,8]))d{8}$'  # 匹配手机号码if re.match(phone_pattern, value):return ('secret_phone')  # 标记字段是否涉密,以及涉密类型(如姓名、手机号码、地址、身份证号码、银行卡号)else:return ('no_secret')class DB(object):def __init__(self,ip,username,password):self.ip = ipself.username = usernameself.password = passwordself.db = pymysql.connect(self.ip,self.username,self.password)self.cursor = self.db.cursor()#  通过schemata获取所有数据库名称def get_database(self):self.cursor.execute("SELECT schema_name from information_schema.schemata ")database_list = self.cursor.fetchall()result = []for line in database_list:if line[0] not in ['information_schema','mysql','performance_schema','test','scan_result']:   #排除默认的数据库result.append(line[0])return result#  获取表名def get_table(self,database):self.cursor.execute("select table_name from information_schema.tables where table_schema= '%s' " % database)table_list = self.cursor.fetchall()result = []for line in table_list:result.append(line[0])return result#  获取字段名def get_column(self,database,table):self.cursor.execute("select column_name from information_schema.columns where table_schema='%s' and table_name='%s'" % (database,table))column_list = self.cursor.fetchall()result = []for line in column_list:result.append(line[0])return result#  获取字段内容def get_content(self,database,table,column):self.cursor.execute("select %s from %s.%s LIMIT 0,1"%(column,database,table))content = self.cursor.fetchall()if content:return content[0][0]def __del__(self):self.db.close()if __name__ == '__main__':with open('ip.txt','r') as f:db = DB(f.read(),'root','root')databases = db.get_database()for database in databases:tables = db.get_table(database)for table in tables:columns = db.get_column(database,table)for column in columns:data = db.get_content(database,table,column)data = str(data)          # 转成字符串,否则正则报错print(database,table,column,data,check_secret(data))   # 输出结果

最终输出的数据标识、标示结果,如下数据库:


参考:

https://www.cnblogs.com/Eleven-Liu/p/9912418.html

获取字段_数据库中敏感字段的标记、标示相关推荐

  1. 数据库中敏感字段的标记、标示

    数据治理需要面临和解决的最重要的问题是,企业这么多的数据库,每个数据库这么多的表,每个表这么多的字段,如何进行信息资产的分类分级. 通过以下方法,可以自动的取企业所有数据库.所有表.所有字段,根据字段 ...

  2. 存clob为空的值_给Oracle数据库中CLOB字段插入空值

    遇到往ORACLE数据库中插入数据时总是报ORA-01084 invalid argument in OCI call错误,经分析是因为表中的一个字段类型为CLOB,并且可为空,当在给该字段插入空值时 ...

  3. 【原创】数据库中时间字段的值读取到DataSet中后,毫秒部分丢失。

    数据库中时间字段的值读取到DataSet中后,毫秒部分丢失. 在网上查了些解决方案,说读取时间时,先转化为DateTime类型,然后在ToString("yyyy-MM-dd HH:mm:s ...

  4. Springboot项目如何设计接口中敏感字段模糊查询?

    目录 前言 场景分析 实现方案 环境配置 依赖配置 代码实现 总结 前言 在<Springboot项目如何设计接口中敏感字段的加密.解密>和<Springboot项目如何设计接口中敏 ...

  5. 数据库中的字段varchar类型和char类型的区别?

    数据库中的字段varchar类型和char类型的区别? 目录 数据库中的字段varchar类型和char类型的区别?

  6. php 查询datetime,急急PHP,数据库中createtime字段类型为datetime,怎样根据这个查询一段时间内的数据...

    数据库中createtime字段类型为datetime,是年月日时分秒,怎样把他转换成时间戳?数据很多,一条好转换,可是那么多怎么办? 回复讨论(解决方案) select unix_timestamp ...

  7. python更新数据库表的时间字段_python更新数据库中某个字段的数据(方法详解)

    连接数据库基本操作,我把每一步的操作是为什么给大家注释一下,老手自行快进. 请注意这是连接数据库操作,还不是更新. import pymysql #导包 #连接数据库 db = pymysql.con ...

  8. 如何将数据库中text字段中返回的数据转换成数组的形式,并且将字符串的数字转换成数字的形式显示

    如何将数据库中text字段中返回的数据转换成数组的形式,并且将字符串的数字转换成数字的形式显示 数据库text字段 数据库中的text字段在前端 界面返回的时候是成字符串的形式的,类似于下图 那么,在 ...

  9. mysql数据库,oracle数据库中对字段的拼接方法

    mysql数据库,oracle数据库中对字段的拼接方法 1.简介 在日常开发中,常常有将多个字段拼接进行sql操作的场景,比如做模糊查询,我这里分两种环境阐述:1.在数据库中的写法:2.在mybati ...

最新文章

  1. Makefile与Shell的问题
  2. java计算两个日期相差月数
  3. 几个常用shell脚本命令
  4. apm固定翼调试方法
  5. 面试题12:打印1到最大的n位数
  6. 云服务器的安全组各个端口代表什么意思?
  7. Python基础--02
  8. 2005-2018 年软考软件设计师 真题分享
  9. 从零开始学编程(所以说英语也是零)
  10. java script 延时_javascript 延时执行函数
  11. 《Redis视频教程》(p19)
  12. 从实例学Kettle(一):获取股票行情数据
  13. tiny4412移植uboot-2019-01(三)
  14. 《漫画算法》读书笔记
  15. oracle logon只有3项,oracle 10g 审计logon和logoff
  16. 计算机硬盘写入量,如何查询固态硬盘SSD的总写入量?
  17. 哈工大信息安全概论2021年期末考点
  18. 5G NR UE 状态转换
  19. k8s创建用户账号——User Account
  20. 注册GitHub时,无法验证您的验证码响应

热门文章

  1. mysq show 指令
  2. iphone怎么检测屏幕是否被点亮 (用UIApplication的Delegate)
  3. Python 列表 sort( )方法
  4. CSS3-边框-外轮廓-文本-渐变-WEB字体
  5. CNN图像分割简史:从R-CNN到Mask R-CNN(译)
  6. 7-5 图形继承与多态 (50 分)
  7. vm设置虚拟服务器定时重启,vm服务器设置自动重启
  8. Spring请求参数和路径变量
  9. JS获取页面中Url的某个参数
  10. 计算机网络基础文档,计算机网络基础-20210608152532.pdf-原创力文档