数据库中敏感字段的标记、标示
数据治理需要面临和解决的最重要的问题是,企业这么多的数据库,每个数据库这么多的表,每个表这么多的字段,如何进行信息资产的分类分级。
通过以下方法,可以自动的取企业所有数据库、所有表、所有字段,根据字段的值,利用正则表达式等方式判断此字段是否属于用户敏感信息,如姓名、手机、地址、身份证等。
最终形成数据的风险地图,库、表、字段、敏感类型和等级,可以为统一加解密、统一日志等提供服务。
#coding:utf-8 '''author:ElevenPython3''' import pymysqlimport 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 = ip self.username = username self.password = password self.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
数据库中敏感字段的标记、标示相关推荐
- 获取字段_数据库中敏感字段的标记、标示
数据治理需要面临和解决的最重要的问题是,企业这么多的数据库,每个数据库这么多的表,每个表这么多的字段,如何进行信息资产的分类分级. 通过以下方法,可以自动的取企业所有数据库.所有表.所有字段,根据字段 ...
- Springboot项目如何设计接口中敏感字段模糊查询?
目录 前言 场景分析 实现方案 环境配置 依赖配置 代码实现 总结 前言 在<Springboot项目如何设计接口中敏感字段的加密.解密>和<Springboot项目如何设计接口中敏 ...
- 数据库中的字段varchar类型和char类型的区别?
数据库中的字段varchar类型和char类型的区别? 目录 数据库中的字段varchar类型和char类型的区别?
- php 查询datetime,急急PHP,数据库中createtime字段类型为datetime,怎样根据这个查询一段时间内的数据...
数据库中createtime字段类型为datetime,是年月日时分秒,怎样把他转换成时间戳?数据很多,一条好转换,可是那么多怎么办? 回复讨论(解决方案) select unix_timestamp ...
- 【原创】数据库中时间字段的值读取到DataSet中后,毫秒部分丢失。
数据库中时间字段的值读取到DataSet中后,毫秒部分丢失. 在网上查了些解决方案,说读取时间时,先转化为DateTime类型,然后在ToString("yyyy-MM-dd HH:mm:s ...
- python更新数据库表的时间字段_python更新数据库中某个字段的数据(方法详解)
连接数据库基本操作,我把每一步的操作是为什么给大家注释一下,老手自行快进. 请注意这是连接数据库操作,还不是更新. import pymysql #导包 #连接数据库 db = pymysql.con ...
- 如何将数据库中text字段中返回的数据转换成数组的形式,并且将字符串的数字转换成数字的形式显示
如何将数据库中text字段中返回的数据转换成数组的形式,并且将字符串的数字转换成数字的形式显示 数据库text字段 数据库中的text字段在前端 界面返回的时候是成字符串的形式的,类似于下图 那么,在 ...
- mysql数据库,oracle数据库中对字段的拼接方法
mysql数据库,oracle数据库中对字段的拼接方法 1.简介 在日常开发中,常常有将多个字段拼接进行sql操作的场景,比如做模糊查询,我这里分两种环境阐述:1.在数据库中的写法:2.在mybati ...
- mysql数据库中常用的类型_MySQL数据库中常用字段类型
MySQL数据库中常用字段类型 整数型:TINYINT,SMALLINT,INT,BIGINT 小数型:FLOAT,DOUBLE,DECIMAL(M,D) 字符型:CHAR,VARCHAR 日期型:D ...
最新文章
- JavaWeb-综合案例(用户信息)-学习笔记05【分页查询功能】
- 图像算法中常用的数学概念
- 使用Chronicle Wire将YAML连接到文件或网络
- 算法系列:5分钟了解哈希算法
- HTML+CSS制作3D旋转相册
- 安卓开发eclipse+adt下载
- 用ProcessOn在线作图
- 开发那点事(六)php抓取北京实时公交数据
- 用mysql征途改等级教程_征途各等级升级经验表附带功勋换经验比例
- Linux: systemd 启动代码分析
- adb shell get/setprop, setenforce...
- nginx防恶意刷新
- 《大数据时代(BIG DATA)》
- 古月居ros第十讲遇到的问题
- 【计算机网络 王道】P2-1 字节与比特
- 基于51单片机的模拟洗衣机控制程序
- C#开发之——StreamReader(10.8)
- Bambook应用“我爱记歌词” 使用说明
- CSDN博客第一期订阅专栏:跟“风云卫星”数据工程师学Python
- 云计算、集群通信、和分布式系统的关系
热门文章
- 部署在CloudFoundry上的nodejs如何正确使用port环境变量
- 如何在CRM WebClient UI里使用HANA Live Report
- java掩码校验_Java 检查Ip掩码
- mysql出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'如何解决?
- html非零正实数正则表达式,正数|非负数|正整数正小数和0 |金额正则表达式
- c语言double字母,C语言double和float 实例分析
- android 自定义view实现拖动放大缩小_自定义itemCheckView
- android json 解析图片路径,Android 使用Gson解析Asset 目录下的.json文件
- java httpclient post 上传文件_httpclient通过post multipart/form-data 上传文件
- python获取设备硬件信息_Python实现读取机器硬件信息的方法示例