mssql sql server禁掉truncate table命令(权限)的方法


摘要:
下文讲述,我们公司最近在数据库的健康检查中,老板提出:“必须禁止数据库的truncate命令”的变相实现方法。
实验环境:sql server 2008 R2


我们深知 “truncate table”权限的以下信息:
1.“表所有者、sysadmin、db_owner、db_ddladmin这几个角色都拥有 TRUNCATE TABLE 删除,避免无法修改这些角色的权限”
2.truncate table 可以快速删除一张大表,并且无相关的日志信息记载
3.truncate table无法运行在以下的设置情况上:
3.1 拥有外键约束的数据表
3.2 使用事务复制和合并复制发布的数据表
综上所述:我们可以发现truncate table在企业中是一个非常危险的sql命令,通过我们在sql命令审计中,都对此命令进行了多级审核或禁止,下文将通过举例的方式讲述,在sqlserver层面,变相的实现“禁止truncate table”命令运行的方法。



实现思路:
我们可以使用truncate table 无法运行在拥有外键约束的表上的这个特性,对数据表进行相关设置,使其无法运行truncate table,避免出现一些异常操作

例:

  /*
设置一个基础表,设置其外键指向禁止使用truncate命令的数据表的主键
*/

create table baseMain(keyId int primary key)
go


create table [maomao365.com]
(keyId int identity primary key,info varchar(10),
fBaseMainKeyId int )
go


alter table  baseMain
add constraint id_fbaseKeyId
  foreign key (keyId) references [maomao365.com](keyId)
  go


  insert into [maomao365.com]
  (info,fBaseMainKeyId)values('test',1),
  ('test2',2)
  go

  insert into baseMain(keyId)values(1)
go


truncate table [maomao365.com]
 
mssql_sqlserver_变相禁用truncate命令的方法

mssql_sqlserver_变相禁用truncate命令的方法