我最近继承了一组非常大的SQL Server数据库。应用程序和数据库架构是一团糟。我遇到了数据库中的几个字段,这些字段存储了不同类型的敏感数据,不应存储它们。由于我的数据库中有近10,000个表,因此我迫切需要一种方法来以编程方式扫描其中的一些数据库,以找出数据的位置。我意识到这将是非常耗费资源的,所以我专门设置了一个服务器来对数据库的备份进行扫描。
购买任何工具我都有零美元。
有没有人知道使用C#和SQL的方法,我可以扫描数据库中所有用户表的敏感数据?
扫描一种类型的数据(例如SSN)的示例将非常有用。我相信我可以将其推断到我需要的所有场景中。
答案 0 :(得分:0)
此sql将列出数据库中的所有用户表和行计数。这将是一个起点..
SELECT o.name,
ddps.row_count
FROM sys.indexes AS i
INNER JOIN sys.objects AS o ON i.OBJECT_ID = o.OBJECT_ID
INNER JOIN sys.dm_db_partition_stats AS ddps ON i.OBJECT_ID = ddps.OBJECT_ID
AND i.index_id = ddps.index_id
WHERE i.index_id < 2 AND o.is_ms_shipped = 0 ORDER BY o.NAME
H个, 0
答案 1 :(得分:0)
此查询将帮助您查找具有特定名称和数据类型
的列SELECT t.name AS table_name,
SCHEMA_NAME(t.schema_id) AS schema_name,
c.name AS column_name ,tp.name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
INNER JOIN sys.types tp ON tp.user_type_id=c.user_type_id
WHERE c.name LIKE '%Product%' AND tp.name LIKE '%int%'
ORDER BY schema_name, table_name;
答案 2 :(得分:0)
此时可能无关紧要,但应作为补充说明:您可以使用信息模式视图查询符合INFORMATION_SCHEMA的ISO标准定义的数据库对象。
答案 3 :(得分:0)
如果您可以将数据库打开到Microsoft SQL Server Managment Studio,则可以尝试使用ApexSQL。这是一个可以从这里下载的插件:
http://www.apexsql.com/sql_tools_search.aspx
例如:您选择数据库,您可以查找列名称。它将显示您拥有该列的所有表。 希望它有所帮助。