Sql server 如何防止在SQL Server 2008 R2中重命名列和表

Sql server 如何防止在SQL Server 2008 R2中重命名列和表,sql-server,sql-server-2008-r2,rename,Sql Server,Sql Server 2008 R2,Rename,我希望通过以下方式保护数据库: 应防止删除和重命名表 应保护列不被删除和重命名 允许添加表和列 将其放到上下文中:它是一个词汇表数据库(查找表),将作为中心主副本,分发到其他数据库(在同一服务器上,将来分发到其他服务器(甚至非SQL server系统) 添加表和列的处理方式可以使客户端数据库能够继续工作,并在更新出现时获得更新。另一方面,删除表和列的处理方式必须不同,并且必须经过协调 我创建了一个DDL触发器来锁定表和列的删除,这是最简单的部分。 不幸的是,重命名表和列似乎是由sp_rena

我希望通过以下方式保护数据库:

  • 应防止删除和重命名表
  • 应保护列不被删除和重命名
  • 允许添加表和列
将其放到上下文中:它是一个
词汇表
数据库(查找表),将作为中心主副本,分发到其他数据库(在同一服务器上,将来分发到其他服务器(甚至非SQL server系统)

添加表和列的处理方式可以使客户端数据库能够继续工作,并在更新出现时获得更新。另一方面,删除表和列的处理方式必须不同,并且必须经过协调

我创建了一个DDL触发器来锁定表和列的删除,这是最简单的部分。
不幸的是,重命名表和列似乎是由
sp_rename
过程处理的,该过程使用以下构造:

EXEC %%Object(ID = @objid).SetName(Name = @newname)

DDL触发器不会检测到这一点。有没有办法确保不重命名表和列?

对于每个表,创建一个带有schemabinding的视图,如下代码所示:

CREATE VIEW PreventDropOnT1
WITH SCHEMABINDING 
AS
    SELECT Col1, Col2
    FROM T1

如何创建用户和登录以及每个用户的权限?嗯,是的,在发布了这个问题之后,我也想到了这条路线。问题是:我还想在DBA上下文中保护自己,防止重命名表和列。我希望有一种方法可以让DDL触发器也检测到这些%%object动作,这样会更容易,因为当DDL触发器处于活动状态时,我会被阻止,但是,只要客户机数据库计划并考虑到名称更改,就可以临时禁用触发器。@user1746581为什么不创建一个较低权限的帐户,并且只在需要时使用admin帐户?