質問

私たちの環境では、SAでログインするユーザーは、テーブルデータを変更できます。

SO I IPなどから変更された変化のような変更データをキャプチャするようにトリガーを書き込みます

CREATE TRIGGER [TRG_Users]
ON [dbo].[UserRights] AFTER INSERT, UPDATE, DELETE
AS

DECLARE @strIP VARCHAR(MAX)

SET @strIP=(SELECT dbo.GetCurrentIP())

IF EXISTS (SELECT * FROM INSERTED) AND EXISTS (SELECT * FROM DELETED)
    --PRINT 'Update happened';
    INSERT INTO Logger(IPAddress,Status)
    VALUES (@strIP,'UPDATE')
ELSE
IF EXISTS (SELECT * FROM INSERTED)
    --PRINT 'Insert happened';
    INSERT INTO Logger(IPAddress,Status)
    VALUES (@strIP,'INSERT')
ELSE
    --PRINT 'Delete happened';
    INSERT INTO Logger(IPAddress,Status)
    VALUES (@strIP,'DELETE')


CREATE FUNCTION [dbo].[GetCurrentIP] ()  
RETURNS varchar(255)  
AS  
BEGIN  
   DECLARE @IP_Address varchar(255);  

   SELECT @IP_Address = client_net_address  
   FROM sys.dm_exec_connections  
   WHERE Session_id = @@SPID;  

  Return @IP_Address;  
  END  
.

しかし問題は、特定のテーブルのトリガを無効にした後にデータを変更することができます。そのため、トリガーは起動しなくなり、ユーザーはデータをシームレスに変更できます。

それでは、データの変更をキャプチャしてそれらをログに記録するための最良の方法は何ですか。だから誰もセキュリティを迂回することはできません。変更データをキャプチャするためのさまざまなアプローチを探しているので、SAアカウントを無効にしないでください。SQL Server 2005/2008に安全な方法がある場合は、ここで議論してください。ありがとう

役に立ちましたか?

解決

SAに関する問題は、このログイン(またはその問題のためのSysadminロール内の他のログイン)に対してすべてのセキュリティチェックがスキップされることです。そのため、SAからの特権を取り消すことはできません。また、SAがバイパスできないインスタンスレベルでできることはありません。

他の人がすでに言ったように、本物のSysadminの作業がない限り、誰もがsysadminとしてログインさせないでください。ベストプラクティスは、SAログインを完全に無効にすることです。

クラスティブ側では、SQL Server監査セッションを作成し、Windowsセキュリティログをターゲットとして使用することです。このようにして、少なくとも誰と、監査を停止したのかを知っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top