【问题标题】:How can I disable a table in a SQL Server database from SSMS如何从 SSMS 禁用 SQL Server 数据库中的表
【发布时间】:2017-11-09 00:25:55
【问题描述】:

我继承了一个用于 C# 客户端应用程序的 SQL Server 数据库。我知道足够危险,但我不是程序员。我知道以前的程序员喜欢在实时数据库中玩耍,因此我有许多我认为是孤立表。

应用程序本身的使用率不是很高,并且可以承受表在很短的时间内不存在的异常情况。我想开始关闭或禁用这些表,以通过反复试验查看它们是否已被使用。

有没有办法在不完全删除数据的情况下关闭它们,以便我可以在需要时快速重新启用它们?或者是否有更透明的方式来发现是否需要这些表?

【问题讨论】:

  • 嗯,这是一个相当暴力的方法,你不能只搜索表名的源代码吗?你怎么知道你正在测试每一个功能?如果您真的想要这样做,只需重命名表格即可。
  • 你可以重命名表格。可能会在名称上附加“.testing”或其他内容。
  • 表上是否有聚集索引?如果是,您可以禁用它们。这有效地使表不可访问。然后,如果需要,您可以重建聚集索引。
  • 我们还使用了数据库审计来查看是否正在使用东西。

标签: c# sql-server ssms


【解决方案1】:

没有简单的方法。可以通过存储过程和来自客户端应用程序的直接 SQL 调用来访问这些表。一个全面的方法意味着您必须有某种方法使每个表不可用(在 cmets 中建议重命名),然后对您的客户端应用程序执行完整的回归测试;您可能必须对数据库中的 each 表执行此操作。客户端应用程序可能会根据登录用户(和相关权限)、日期、配置等外部因素有条件地访问表。

SQL Server Profiler 是一个很好的工具,但它本身并不能完全解决您的问题,因为您仍然需要分析它捕获的内容。

【讨论】:

  • 该应用程序确实使用了存储过程和来自客户端的 SQL 调用。我的目标是将所有 SQL 查询迁移到存储过程以保持一致性和我个人的理智。但首先我想清理现有的混乱。我很肯定重命名表不是最好的方法,但规模小且使用有限,这可能是我可以忍受的。我有一种直觉,感觉 3 张桌子已经死了,但我很不舒服,只是把桌子拿走并希望最好。
【解决方案2】:

您可以创建一个新的数据库架构并将表传输到该架构

ALTER SCHEMA 新架构 TRANSFER dbo.your 表

然后在测试后再次将它们转移回来。

https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-schema-transact-sql

【讨论】:

    【解决方案3】:

    您可以更改权限,以便除了您和 dbo 之外没有人对表具有选择权限。您不能阻止 dbo 或 sa 拥有表的所有权限。

    你也可以加密表格见-Encrypting database tables in SQL Server 2008,在这种情况下它真的被锁定了。

    您还可以使用 SQL Server 审核来查看是否有人读取数据。审计是一种影响极低的产品(随 SQL Server 2008 提供),并且非常容易设置,并且可以审计选择,这与触发器不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多