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

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

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

#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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. mysql数据库中常用的类型_MySQL数据库中常用字段类型

    MySQL数据库中常用字段类型 整数型:TINYINT,SMALLINT,INT,BIGINT 小数型:FLOAT,DOUBLE,DECIMAL(M,D) 字符型:CHAR,VARCHAR 日期型:D ...

最新文章

  1. JavaWeb-综合案例(用户信息)-学习笔记05【分页查询功能】
  2. 图像算法中常用的数学概念
  3. 使用Chronicle Wire将YAML连接到文件或网络
  4. 算法系列:5分钟了解哈希算法
  5. HTML+CSS制作3D旋转相册
  6. 安卓开发eclipse+adt下载
  7. 用ProcessOn在线作图
  8. 开发那点事(六)php抓取北京实时公交数据
  9. 用mysql征途改等级教程_征途各等级升级经验表附带功勋换经验比例
  10. Linux: systemd 启动代码分析
  11. adb shell get/setprop, setenforce...
  12. nginx防恶意刷新
  13. 《大数据时代(BIG DATA)》
  14. 古月居ros第十讲遇到的问题
  15. 【计算机网络 王道】P2-1 字节与比特
  16. 基于51单片机的模拟洗衣机控制程序
  17. C#开发之——StreamReader(10.8)
  18. Bambook应用“我爱记歌词” 使用说明
  19. CSDN博客第一期订阅专栏:跟“风云卫星”数据工程师学Python
  20. 云计算、集群通信、和分布式系统的关系

热门文章

  1. 部署在CloudFoundry上的nodejs如何正确使用port环境变量
  2. 如何在CRM WebClient UI里使用HANA Live Report
  3. java掩码校验_Java 检查Ip掩码
  4. mysql出现ERROR 1054 (42S22): Unknown column 'password' in 'field list'如何解决?
  5. html非零正实数正则表达式,正数|非负数|正整数正小数和0 |金额正则表达式
  6. c语言double字母,C语言double和float 实例分析
  7. android 自定义view实现拖动放大缩小_自定义itemCheckView
  8. android json 解析图片路径,Android 使用Gson解析Asset 目录下的.json文件
  9. java httpclient post 上传文件_httpclient通过post multipart/form-data 上传文件
  10. python获取设备硬件信息_Python实现读取机器硬件信息的方法示例