sql server 如何防止触发器被drop或alter

用户有管理员权限的,触发器代码可以加密,但是用户可以修改或删除。怎么控制?
数据库服务器物理位置在用户方,并且用户拥有db_owner角色
不可能通过权限去控制,
看看能不能用代码去控制,比如递归验证,或者更加灵活的方法
只要让流程进入闭环,用户删除某一个对象是没用的
但是可不可以实现,怎么去实现,希望给予帮助,谢谢

试试用DDL触发器,但是作为管理员sa,他仍然有修改这个触发器的权力
如果只是db_owner的话应该有效

CREATE TRIGGER 禁止对数据库内触发器操作
ON DATABASE
FOR DROP_TRIGGER, ALTER_TRIGGER
AS
PRINT '对不起,您不能对数据库内触发器进行操作'
ROLLBACK ;追问

感谢你的帮助,请问SQL SERVER 2008有DDL触发器吗?

追答

从2005开始就有了,你可以用自己测试一下,另外加了这个的话,
所有人都不能删除或更改库内触发器了,
要更改的话应该先删除或修改这条DDL触发器
这一点比较麻烦

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-11-02
只有被动的方案:

使用sql做一个检查,检查触发器是否存在。
不存在则报警。

使用sql job 定期执行。追问

谢谢你的回答,存在几个问题
1)删除后,再建立一个同名的触发器,就控制不了了
2)报警没有用,程序依旧可以执行

追答

因为其有管理员权限,故肯定避免不了。

我的意思是,进行检查,及时发现进行修复。

属于没有办法的办法。

追问

很抱歉,解决不了根本问题
1)用户要求的db_owner角色,不可能不给
2)这是用户授权加密的方法,
因为用户方有专门的数据库管理人员
到达授权使用日期后,会自己去更改授权
所以必须要严格控制

第2个回答  2012-11-02
1,如果你有前台应用程序,可以通过前台应用程序的代码段来定义用户组,定义用户权限。
2,如果你没有前台应用程序,可以到SQL企业管理器里面修改登录用户的数据库角色(安全性),数据库角色的属性是不能改的。
3,在嵌有触发器的表上定义权限属性。追问

数据库服务器物理位置在用户方,并且用户是拥有db_owner角色
不可能用权限或角色去控制,
你想想有什么办法在代码上控制,比如递归验证。。。。
谢谢

第3个回答  2012-11-02
管理员只给用户创建触发器的权限,不给drop或alter的权限不就行了!追问

用户用的必须是管理员角色

追答

他既然是管理员角色,你还想怎样限制管理员的权限啊?
sql service数据库中,管理员角色不是最高角色?

第4个回答  2012-11-02
没辙,只能用用户权限控制了追问

可用户有最高管理员权限,不可能权限控制

追答

你都说是最高管理员权限了,那怎么控制呢?

第5个回答  2012-11-02
权限设置问题啊

sql server 如何防止触发器被drop或alter
CREATE TRIGGER 禁止对数据库内触发器操作 ON DATABASE FOR DROP_TRIGGER, ALTER_TRIGGER AS PRINT '对不起,您不能对数据库内触发器进行操作'ROLLBACK ;

sql server创建一个触发器,保护当前服务器的所有数据库不被修改。
1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\\mssql7backup\\MyNwind_1.dat'--- 开始 备份 BACKUP DATABASE pubs TO testBack...

SQL触发器如何使用
如果向指定了 WITH CHECK OPTION 选项的可更新视图添加 INSTEAD OF 触发器,SQL Server 将产生一个错误。用户必须用 ALTER VIEW 删除该选项后才能定义 INSTEAD OF 触发器。{ [DELETE] [,] [INSERT] [,] [UPDATE] }是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。在触...

SQL语句建立触发器中语句出错了,哪位帮我修改阿?谢谢
如果向指定了 WITH CHECK OPTION 选项的可更新视图添加 INSTEAD OF 触发器,SQL Server 将产生一个错误。用户必须用 ALTER VIEW 删除该选项后才能定义 INSTEAD OF 触发器。{ [DELETE] [,] [INSERT] [,] [UPDATE] }是指定在表或视图上执行哪些数据修改语句时将激活触发器的关键字。必须至少指定一个选项。在触...

SQL触发器SQL触发器语法
触发器名称需唯一,符合标识符规则,可以使用WITH ENCRYPTION加密并设置NOT FOR REPLICATION防止复制过程中的触发。触发器通常包含Transact-SQL语句,用于检查或修改数据,但不会返回结果给用户。在SQL Server中,触发器行为有特定限制。例如,当兼容级别为70时,INSERT\/UPDATE触发器不能引用deleted表中的text、...

sql server2008中的触发器有3种类型,分别为
DML)事件时将启用。DML事件即指在表或视图中修改数据的insert、update、delete语句也。(2)DDL触发器:是指当服务器或数据库中发生数据定义语言(DDL)事件时将启用。DDL事件即指在表或索引中的create、alter、drop语句也。(3)登陆触发器:是指当用户登录SQL SERVER实例建立会话时触发。

sql 触发器使用方法
SQL触发器是一种特殊类型的存储过程,它们在特定的数据库操作事件(如插入、更新、删除)发生时自动执行。触发器的使用方法取决于FOR关键字后的操作类型,如INSERT、UPDATE或DELETE。此关键字确保触发器仅在相应事件上触发,排除了其他操作如SELECT、TRUNCATE或UPDATETEXT等。以注册系统为例,为了防止用户更改...

SQL,DLL,触发器
在 你 修改或者 删除 表之后 输出 you must disable trigger "ddd" to drop or alter tables!,并且回滚信息,也就是 之前执行的操作不算,回到执行操作之前的状态

Oracle数据库中有关触发器问题
触发器主要是通过事件进行触发而被执行的 触发器的触发事件分可为 类 分别是DML事件 DDL事件和数据库事件 而存储过程可以通过存储过程名字而被直接调用 当对某一表进行诸如UPDATE INSERT DELETE 这些操作时 SQL Server 就会自动执行触发器所定义的SQL 语句 从而确保对数据的处理必须符合由这些SQL 语句所...

求创建一个关于禁用\/启用触发器的存储过程,
此时不希望触发器工作,以避免造成延时等等 ALTER TRIGGER <触发器名> DISABLE;禁用某个触发器 ALTER TRIGGER <触发器名> ENABLE;启用某个触发器 ALTER TABLE <表名> DISABLE ALL TRIGGERS;禁用表上的所有的触发器 ALTER TABLE <表名> ENABLE ALL TRIGGERS;启用表上的所有的触发器 \/ --创建表和...

相似回答