怎样使用MSSQL 2000 的删除触发器建立删除日志。---过江项羽

luhongjun 2002-02-22 08:51:12
在MS SQLServer 2000下建立一个删除的触发器,它能够获得发出删除命令客户机的 IP地址、主机名称、用户名称及服务器的当前日期、时间等。
技术上如果可能的话,最好能够获得客户机的CPU型号,硬盘ID号 型号和大小,内存大小, 客户机当前时间等信息。

望各位朋友们帮忙,谢谢了。

最好有代码,再另外加分酬谢。
...全文
99 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
supsuccess 2002-03-06
  • 打赏
  • 举报
回复
先收...
luhongjun 2002-02-27
  • 打赏
  • 举报
回复
还有我的应用程序用的是三层结构,使用Host_Name()得到的全是应用服务器的名字,我应该怎样得到发起客户端的机器名?

luhongjun 2002-02-27
  • 打赏
  • 举报
回复
在提一下,大家帮帮忙。
mmzxg 2002-02-27
  • 打赏
  • 举报
回复
是了,在EMTERPRISE中的LOGGER那里好象是有晒所有登录用户的资料的吧,包括用户网卡之类的东西,我想,是不是在这里入手呢。
小子菜鸟,不知所讲是否有用,请各位指教。。。。。
mmzxg 2002-02-27
  • 打赏
  • 举报
回复
学习学习,今天上班的时候正想着怎么处理这些问题呢?
学习,学习。。。。。。
luhongjun 2002-02-25
  • 打赏
  • 举报
回复
怎样取得客户机的IP地址呢?

>zhudexiang(阿祥)
>在现有的SQL功能中要实现这些功能很难,你可以自己做一个扩展存储过程,在触发器中调用该过程来实现!
用扩展存储过程怎样实现?能否給个提示或給个例子?

在客户端的应用程序中获得IP地址,硬盘ID等我已经实现,但我现在想在触发器中实现这些信息,应该怎样做?
昵称被占用了 2002-02-23
  • 打赏
  • 举报
回复
今天在局域网里测试(用NAME PIPE),都能测到,包括用查询分析器删除的App_Name()。

是不是SQL Explorer有特别的设置?或者和NAME PIPE有关?
书生 2002-02-22
  • 打赏
  • 举报
回复
哈哈~
亏你给我发那么多短信息。
我无能为力。帮你找找函数吧。
zhuzhichao 2002-02-22
  • 打赏
  • 举报
回复
我想你是想达到审计模式的效果.

可以在MSSQL中不能像Oracle那样对SCHEMA做一个触发器以舰听所有的表的DDL或者DML语句的动作.

因此,如果你想监听客户机上的删除动作,只有对每个表做触发器这种笨方法.
无法用一个触发器办到.

至于客户机的 IP地址、主机名称、用户名称及服务器的当前日期、时间,则都是可以实现的.

客户机的CPU型号,硬盘ID号 型号和大小,内存大小, 客户机当前时间等信息也是有办法获得的.
昵称被占用了 2002-02-22
  • 打赏
  • 举报
回复
一个触发器代码:

if exists (select * from sysobjects where id = object_id('dbo.Trigg_Test_Del') and sysstat & 0xf = 8)
drop trigger dbo.Trigg_Test_Del
GO

create trigger Trigg_Test_Del on Test
For Delete
AS


insert TestLogs
select Id, --被删除记录的Id
opTime=GetDate(), --删除日期时间
HostName=Host_Name(), --主机名称
AppName=App_Name(), --客户机使用的应用程序
UserName=sUser_Name() --用户名
from DELETED

GO

luhongjun 2002-02-22
  • 打赏
  • 举报
回复
如果客户端使用SQL Explorer进行删除,则
Host_Name(), --主机名称
App_Name(), --客户机使用的应用程序
sUser_Name() --用户名
产生空值(空格)
如果使用ADO进行删除,
Host_Name(), --主机名称
sUser_Name() --用户名
能够产生正确的结果
App_Name(), --客户机使用的应用程序
不能得到正确的结果
TR@SOE 2002-02-22
  • 打赏
  • 举报
回复
项羽兄,我只能表示关注。
昵称被占用了 2002-02-22
  • 打赏
  • 举报
回复
主机名称:HOST_NAME()
用户名称:SUSER_NAME()或SUSER_SNAME()
服务器的当前日期、时间:getdate()
昵称被占用了 2002-02-22
  • 打赏
  • 举报
回复
客户机的主机名称、用户名称及服务器的当前日期、时间的获得不难,分别有函数,其他信息可能在触发器里实现比较难,在客户端实现应该不难。
zhuzhichao 2002-02-22
  • 打赏
  • 举报
回复
luhongjun:

好的,等下周一來再說吧.
我雙休日不在.
luhongjun 2002-02-22
  • 打赏
  • 举报
回复
怎么看不到?
luhongjun 2002-02-22
  • 打赏
  • 举报
回复
首先谢谢,Haiwer(海阔天空--回复语句只对MSSQL有效) 兄的回复。
Host_Name(), --主机名称
App_Name(), --客户机使用的应用程序
sUser_Name() --用户名
中只有在服务器上使用时,才能真正得到合法的值,如果在其他客户机上使用,则为空。
还有客户机的IP地址应该使用哪个函数,在SQL7.0中的24个系统函数中并没有获得客户机IP的函数,2000下是否有,没有应该以什么方式获得。

zhuzhichao(炎龙骑士团—索尔—破龙击)
可否详细的说一说,麻烦不怕,能解决问题就可以。

我现在可以把删除的记录用触发器保存到日志中,但客户端主机名,IP地址等信息无法获得,只有在服务器上进行删除时才可以扑捉。


34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧