日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

SQL SERVER 利用觸發(fā)器禁止刪除數(shù)據(jù)并記錄刪除日志

 刮骨劍 2019-05-17

        有時(shí)候我們數(shù)據(jù)庫(kù)表中的數(shù)據(jù)會(huì)莫名其妙的被刪除,不知道是業(yè)務(wù)問(wèn)題還是被黑了,所以我們想要在數(shù)據(jù)庫(kù)操作層面對(duì)此進(jìn)行制止,同時(shí)記錄操作的日志,我們可以利用觸發(fā)器來(lái)實(shí)現(xiàn)這個(gè)需求,測(cè)試數(shù)據(jù):

  1. --測(cè)試數(shù)據(jù)
  2. if not object_id(N'T') is null
  3. drop table T
  4. Go
  5. Create table T([ID] int,[姓名] nvarchar(22))
  6. Insert T
  7. select 1,N'張三' union all
  8. select 2,N'李四' union all
  9. select 3,N'王五'
  10. GO
  11. --測(cè)試數(shù)據(jù)結(jié)束

        新建日志表:

  1. CREATE TABLE TBLOG
  2. (
  3. ID INT NOT NULL IDENTITY(1, 1) ,
  4. EVTIME DATETIME NOT NULL DEFAULT ( GETDATE() ) , --訪問(wèn)時(shí)間
  5. [SQL] VARCHAR(300) , --執(zhí)行的SQL語(yǔ)句
  6. USERID VARCHAR(128) NOT NULL DEFAULT ( SUSER_SNAME() ) , --連接的時(shí)候使用的哪個(gè)SQL登陸用戶
  7. HOSTNAME VARCHAR(128) NOT NULL DEFAULT ( HOST_NAME() ) , --客戶端的機(jī)器名
  8. LOGINID VARCHAR(128), --客戶端的登陸用戶(OS的用戶)
  9. APPNAME VARCHAR(128)NOT NULL DEFAULT ( APP_NAME()) --是從查詢分析器,還是應(yīng)用程序來(lái)執(zhí)行的
  10. )

        新建觸發(fā)器:

  1. CREATE TRIGGER TR_TBTEST ON T
  2. FOR DELETE
  3. AS
  4. RAISERROR('錯(cuò)誤',16,8)
  5. ROLLBACK TRAN
  6. --SQL
  7. CREATE TABLE #T
  8. (
  9. EVENTTYPE VARCHAR(20) ,
  10. PARAMETERS INT ,
  11. EVENTINFO VARCHAR(300)
  12. )
  13. DECLARE @SPID VARCHAR(20)
  14. SET @SPID = CAST(@@SPID AS VARCHAR)
  15. INSERT #T
  16. EXEC ( 'DBCC INPUTBUFFER (' + @SPID + ')'
  17. )
  18. --進(jìn)程信息
  19. DECLARE @USERID VARCHAR(128) , --連接的時(shí)候使用的哪個(gè)SQL登陸用戶
  20. @HOSTNAME VARCHAR(128) , --客戶端的機(jī)器名
  21. @LOGINID VARCHAR(128) , --客戶端的登陸用戶(OS的用戶)
  22. @APPNAME VARCHAR(128) --是從查詢分析器,還是應(yīng)用程序來(lái)執(zhí)行的
  23. SELECT @USERID = LOGINAME , --連接的時(shí)候使用的哪個(gè)SQL登陸用戶
  24. @HOSTNAME = HOSTNAME , --客戶端的機(jī)器名
  25. @LOGINID = NT_USERNAME , --客戶端的登陸用戶(OS的用戶)
  26. @APPNAME = PROGRAM_NAME --是從查詢分析器,還是應(yīng)用程序來(lái)執(zhí)行的
  27. FROM MASTER..SYSPROCESSES
  28. WHERE SPID = @@SPID
  29. INSERT TBLOG
  30. ( SQL ,
  31. USERID ,
  32. HOSTNAME ,
  33. LOGINID ,
  34. APPNAME
  35. )
  36. SELECT EVENTINFO ,
  37. @USERID ,
  38. @HOSTNAME ,
  39. @LOGINID ,
  40. @APPNAME
  41. FROM #T
  42. GO

        測(cè)試刪除:

DELETE FROM T WHERE id=1

        結(jié)果:


        查詢?nèi)罩竞蛿?shù)據(jù)情況:

  1. SELECT * FROM TBLOG
  2. SELECT * FROM T

        結(jié)果:


        以上實(shí)現(xiàn)了我們想要的禁止刪除并添加日志的功能,當(dāng)然我們也可以把這個(gè)應(yīng)用到INSERT、UPDATE等操作中。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多