-1

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

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

有谁知道使用 C# 和 SQL 的方法可以扫描数据库中的所有用户表以查找敏感数据?

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

4

4 回答 4

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;
于 2014-01-29T16:36:01.437 回答
0

这在此时可能无关紧要,但应作为附加说明:您可以使用信息模式视图来查询符合 INFORMATION_SCHEMA 的 ISO 标准定义的数据库对象。

MSDN 链接

于 2014-05-21T18:34:20.390 回答
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, O

于 2014-01-29T16:03:34.653 回答
0

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

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

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

于 2015-09-25T14:14:05.523 回答