获取字段_数据库中敏感字段的标记、标示
数据治理需要面临和解决的最重要的问题是,企业这么多的数据库,每个数据库这么多的表,每个表这么多的字段,如何进行信息资产的分类分级。
通过以下方法,可以自动的取企业所有数据库、所有表、所有字段,根据字段的值,利用正则表达式等方式判断此字段是否属于用户敏感信息,如姓名、手机、地址、身份证等。
最终形成数据的风险地图,库、表、字段、敏感类型和等级,可以为统一加解密、统一日志等提供服务。
#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
获取字段_数据库中敏感字段的标记、标示相关推荐
- 数据库中敏感字段的标记、标示
数据治理需要面临和解决的最重要的问题是,企业这么多的数据库,每个数据库这么多的表,每个表这么多的字段,如何进行信息资产的分类分级. 通过以下方法,可以自动的取企业所有数据库.所有表.所有字段,根据字段 ...
- 存clob为空的值_给Oracle数据库中CLOB字段插入空值
遇到往ORACLE数据库中插入数据时总是报ORA-01084 invalid argument in OCI call错误,经分析是因为表中的一个字段类型为CLOB,并且可为空,当在给该字段插入空值时 ...
- 【原创】数据库中时间字段的值读取到DataSet中后,毫秒部分丢失。
数据库中时间字段的值读取到DataSet中后,毫秒部分丢失. 在网上查了些解决方案,说读取时间时,先转化为DateTime类型,然后在ToString("yyyy-MM-dd HH:mm:s ...
- Springboot项目如何设计接口中敏感字段模糊查询?
目录 前言 场景分析 实现方案 环境配置 依赖配置 代码实现 总结 前言 在<Springboot项目如何设计接口中敏感字段的加密.解密>和<Springboot项目如何设计接口中敏 ...
- 数据库中的字段varchar类型和char类型的区别?
数据库中的字段varchar类型和char类型的区别? 目录 数据库中的字段varchar类型和char类型的区别?
- php 查询datetime,急急PHP,数据库中createtime字段类型为datetime,怎样根据这个查询一段时间内的数据...
数据库中createtime字段类型为datetime,是年月日时分秒,怎样把他转换成时间戳?数据很多,一条好转换,可是那么多怎么办? 回复讨论(解决方案) select unix_timestamp ...
- python更新数据库表的时间字段_python更新数据库中某个字段的数据(方法详解)
连接数据库基本操作,我把每一步的操作是为什么给大家注释一下,老手自行快进. 请注意这是连接数据库操作,还不是更新. import pymysql #导包 #连接数据库 db = pymysql.con ...
- 如何将数据库中text字段中返回的数据转换成数组的形式,并且将字符串的数字转换成数字的形式显示
如何将数据库中text字段中返回的数据转换成数组的形式,并且将字符串的数字转换成数字的形式显示 数据库text字段 数据库中的text字段在前端 界面返回的时候是成字符串的形式的,类似于下图 那么,在 ...
- mysql数据库,oracle数据库中对字段的拼接方法
mysql数据库,oracle数据库中对字段的拼接方法 1.简介 在日常开发中,常常有将多个字段拼接进行sql操作的场景,比如做模糊查询,我这里分两种环境阐述:1.在数据库中的写法:2.在mybati ...
最新文章
- Makefile与Shell的问题
- java计算两个日期相差月数
- 几个常用shell脚本命令
- apm固定翼调试方法
- 面试题12:打印1到最大的n位数
- 云服务器的安全组各个端口代表什么意思?
- Python基础--02
- 2005-2018 年软考软件设计师 真题分享
- 从零开始学编程(所以说英语也是零)
- java script 延时_javascript 延时执行函数
- 《Redis视频教程》(p19)
- 从实例学Kettle(一):获取股票行情数据
- tiny4412移植uboot-2019-01(三)
- 《漫画算法》读书笔记
- oracle logon只有3项,oracle 10g 审计logon和logoff
- 计算机硬盘写入量,如何查询固态硬盘SSD的总写入量?
- 哈工大信息安全概论2021年期末考点
- 5G NR UE 状态转换
- k8s创建用户账号——User Account
- 注册GitHub时,无法验证您的验证码响应