以编程方式扫描整个DB

时间:2014-01-29 15:59:51

标签: c# sql-server database tsql database-scan

我最近继承了一组非常大的SQL Server数据库。应用程序和数据库架构是一团糟。我遇到了数据库中的几个字段,这些字段存储了不同类型的敏感数据,不应存储它们。由于我的数据库中有近10,000个表,因此我迫切需要一种方法来以编程方式扫描其中的一些数据库,以找出数据的位置。我意识到这将是非常耗费资源的,所以我专门设置了一个服务器来对数据库的备份进行扫描。

购买任何工具我都有零美元。

有没有人知道使用C#和SQL的方法,我可以扫描数据库中所有用户表的敏感数据?

扫描一种类型的数据(例如SSN)的示例将非常有用。我相信我可以将其推断到我需要的所有场景中。

4 个答案:

答案 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标准定义的数据库对象。

MSDN LINK

答案 3 :(得分:0)

如果您可以将数据库打开到Microsoft SQL Server Managment Studio,则可以尝试使用ApexSQL。这是一个可以从这里下载的插件:

http://www.apexsql.com/sql_tools_search.aspx

例如:您选择数据库,您可以查找列名称。它将显示您拥有该列的所有表。 希望它有所帮助。