请问我从其他机器上通过网络删除SQL服务器上的数据,能不能把删除使用的机器的IP记录下来呢?

解决方案 »

  1.   

    可以啊,
    你可以create一个trace在sql里面,能够得到执行这个操作的用户和工作站,通过ping或者rdns可以得到他的ip地址
      

  2.   

    怎么给你说呢,我做了个程序,可以通过网络删除SQL数据库的数据,可是后来才发现有人利用这个软件删除了好多数据,使得上级来检查的时候找不到数据了,现在我想如果谁在删除数据的同时立刻把他的IP地址记录下来,上级来找的时候我也可以拿出证据啊,其实这件事情怪我,做软件的时候望了设置密码了,唉!
      

  3.   

    如何建trace你看看帮助就知,对于第二种办法,看看
    create trigger ttt on table1
    for delete
    as
    insert into log_table
    (user,fdate)
    select hostname, getdate()
    具体自己调一下----
    不过如果你公开了sa密码,别人同样可以破掉,建议更改连接,添加密码,不要使用sa
      

  4.   

    create trigger ttt on table1
    for delete
    as
    insert into log_table
    (user,fdate)
    select hostname, getdate()从哪里看出来你记录下来IP地址了呢?能不能具体的解释一下,我看不懂
      

  5.   

    用xp_cmdshell执行ping hostname,得到ip
      

  6.   

    不过为什么要ip,直接计算机名也可以了阿,计算机名能改/ip也能改,就算你用mac地址,别人换网卡还不一样?!
      

  7.   

    create trigger ttt on table1
    for delete
    as
    insert into log_table
    (user,fdate)
    select hostname, getdate()
    这段代码在哪里用?能具体的举个例子吗?方便的话再解释一下,成功过后马上给分
      

  8.   

    我平時的做法是:建立一個日志表,表的結構和數據表的結構一樣,並且還加上幾個字段:DelDate(默認值設為:(getdate()) ,取得操作日期),
    HostName(默認值設為:(host_name()) ,這個函數可以取得計算機名稱),
    OperateType(紀錄操作的類型,添加?修改?刪除?),
    並在日志表去掉所有的約束(比如主鍵什麼的)。然後做觸發器。我估計你不怎麼會用觸發器,所以以SQL數據庫為例說明:直接在Enterprise的數據庫的Tables列表裡面右鍵點數據表,選擇“所有工作”----“Manage Triggers”
    然後就可以編輯觸發器代碼了。代碼如下
    CREATE TRIGGER [TRIGGER_DELETE_NAME] ON [dbo].[TABLE_NAME] 
    FOR DELETE     --或者是INSERT,UPDATE取決於你需要對什麼操作類型進行紀錄
    AS
    Insert Into 日志表(你的數據表字段名列表,OperateType)
    SELECT         你的數據表字段名列表,'Delete'
    FROM             Deleted其中deleted是系統臨時表,用來紀錄你刪除的紀錄。同樣,還可以為添加和修改編寫觸發器,以下:
    添加:
    CREATE TRIGGER [TRIGGER_INSERT_NAME] ON [dbo].[TABLE_NAME] 
    FOR INSERT
    AS
    Insert Into 日志表(你的數據表字段名列表,OperateType)
    SELECT         你的數據表字段名列表,'Inserted'
    FROM             Inserted修改有點不一樣,修改被系統認為是先刪除舊紀錄,再添加新紀錄,所以寫發如下:
    CREATE TRIGGER [TRIGGER_DELETE_NAME] ON [dbo].[TABLE_NAME] 
    FOR UPDATE    
    AS
    Insert Into 日志表(你的數據表字段名列表,OperateType)
    SELECT         你的數據表字段名列表,'Update-D'
    FROM             Deleted
    Insert Into 日志表(你的數據表字段名列表,OperateType)
    SELECT         你的數據表字段名列表,'Update-I'
    FROM             Inserted
      

  9.   

    CREATE TRIGGER [TRIGGER_INSERT_NAME] ON [dbo].[TABLE_NAME] 
    FOR INSERT
    AS
    Insert Into 日志表(你的數據表字段名列表,OperateType)
    SELECT         你的數據表字段名列表,'Inserted'
    FROM             Inserted修改有點不一樣,修改被系統認為是先刪除舊紀錄,再添加新紀錄,所以寫發如下:
    CREATE TRIGGER [TRIGGER_DELETE_NAME] ON [dbo].[TABLE_NAME] 
    FOR UPDATE    
    AS
    Insert Into 日志表(你的數據表字段名列表,OperateType)
    SELECT         你的數據表字段名列表,'Update-D'
    FROM             Deleted
    Insert Into 日志表(你的數據表字段名列表,OperateType)
    SELECT         你的數據表字段名列表,'Update-I'
    FROM             Inserted这些语句在什么地方执行呢?我要是想查看该怎么办呢,查询日志表吗?
      

  10.   

    These code will run automatic when u change ur data_table's data.
    yes,u can get the logs from the log_table.
      

  11.   

    create trigger ttt on table1
    for delete
    as
    insert into log_table
    (user,fdate)
    select hostname, getdate()
    这段代码在哪里用?能具体的举个例子吗?方便的话再解释一下,成功过后马上给分把这段代码拿到sql server 上执行即可.以后如果有人删除delete Table1中的数据,语句
    insert into log_table
    (user,fdate)
    select hostname, getdate()
    会自动执行.
      

  12.   

    创建log_table的时候为什么执行的时候总是在user上出问题呢?如果把User改成fuser就可以呢?是不是创建触发器还需要sequence之类的东西,这是什么呢?
      

  13.   

    user是SQL的保留字,如果你真要用user的話,可以用“[user]”
      

  14.   

    谁能解释下sequence作用,越简单明了越好