Änderungen an Rechten der "Windows Anmeldungen"...

10. April 2012 10:59

...wird das irgendwo im SQL Server mitgeloggt?

Kann ich sehen wer welche Änderung an einem User bez. Rechteänderung vorgenommen hat?

Danke

(Frage bezieht sich auf Classic Client)

Re: Änderungen an Rechten der "Windows Anmeldungen"...

10. April 2012 11:35

Hallo neocortex2001,

zuerst einmal herzlich Willkommen in unserer Community.
Ich hoffe, du hattest ein angenehmes Osterfest.

Zu deiner Frage:
Ob es eine Möglichkeit gibt, die Änderungen SQL-seitig zu protokollieren, und wenn ja, wie, weiß ich leider nicht.
Du könntest jedoch innerhalb von NAV das Änderungsprotokoll auf die Tabellen aktivieren, dann siehst du in den Änderungsprotokollposten, wer wann was von welchem Wert auf welchen Wert geändert bzw. eingefügt oder gelöscht hat.

Re: Änderungen an Rechten der "Windows Anmeldungen"...

10. April 2012 11:47

Ich sehe es genauso wie Timo. Eine Anmerkung aber noch zum Änderungsprotokoll: Wenn ein Benutzer SQL-seitig die Berechtigungen manipuliert bedeutet es auch, dass das Änderungsprotokoll hintergangen wird.

Re: Änderungen an Rechten der "Windows Anmeldungen"...

10. April 2012 11:48

Timo Lässer hat geschrieben:Hallo neocortex2001,

zuerst einmal herzlich Willkommen in unserer Community.
Ich hoffe, du hattest ein angenehmes Osterfest.

Zu deiner Frage:
Ob es eine Möglichkeit gibt, die Änderungen SQL-seitig zu protokollieren, und wenn ja, wie, weiß ich leider nicht.
Du könntest jedoch innerhalb von NAV das Änderungsprotokoll auf die Tabellen aktivieren, dann siehst du in den Änderungsprotokollposten, wer wann was von welchem Wert auf welchen Wert geändert bzw. eingefügt oder gelöscht hat.



Hi Danke,

kannst Du mir evtl. Screenshots zeigen wo das gemacht wird?

Wenn ich das richtig verstehe müsste es aber bereits aktiviert gewesen sein, wenn ich die änderungen in der vergangenheit sehen will.

Gruß

Re: Änderungen an Rechten der "Windows Anmeldungen"...

10. April 2012 12:48

Hi,

es gibt wohl Tools, die die SQL-Logs auswerten können und man so Änderungen nachvollziehen kann.

Für die Zukunft könnte man einen SQL-Trigger in der Tabelle Permission anlegen, der Änderungen in eine separate LogTabelle schreibt. Könnte in etwa so aussehen:
Code:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Volker Strähle
-- Create date: 10.04.2012
-- Description:   Logging Of PermissionCahnges
--
-- Script for LogginTable
/* CREATE TABLE [dbo].[PermissionLog](
   [RoleID] [varchar](20) NOT NULL,
   [ObjectType] [int] NOT NULL,
   [ObjectID] [int] NOT NULL,
   [ReadPermission] [int] NOT NULL,
   [InsertPermission] [int] NOT NULL,
   [ModifyPermission] [int] NOT NULL,
   [DeletePermission] [int] NOT NULL,
   [ExecutePermission] [int] NOT NULL,
   [SecurityFilter] [varbinary](252) NOT NULL,
   [ExecutingUser] [nvarchar](255)) */
-- =============================================
CREATE TRIGGER LoggingChangesOnPerm
   ON  dbo.Permission
   AFTER UPDATE
AS
BEGIN

   SET NOCOUNT ON;
declare @navuser as nvarchar(255);
declare @RoleID as varchar(20), @Objecttype as Int, @ObjectID as Int, @ReadPermission as Int,
           @InsertPermission as Int, @ModifyPermission as Int,
           @DeletePermission as Int, @ExecutePermission as Int, @SecurityFilter as Int;
           
set @navuser=CURRENT_USER

   DECLARE Log_Cursor CURSOR FOR
    SELECT INSERTED.[Role ID] as RoleID, INSERTED.[Object Type] as Objecttype, INSERTED.[Object ID] as ObjectID, INSERTED.[Read Permission] as ReadPermission,
           INSERTED.[Insert Permission] as InsertPermission, INSERTED.[Modify Permission] as ModifyPermission,
           INSERTED.[Delete Permission] as DeletePermission, INSERTED.[Execute Permission] as ExecutePermission, INSERTED.[Security Filter] as SecurityFilter
           FROM INSERTED;
   
   OPEN Log_Cursor;
   FETCH NEXT FROM Item_Cursor into @RoleID, @Objecttype, @ObjectID, @ReadPermission,
           @InsertPermission, @ModifyPermission, @DeletePermission, @ExecutePermission, @SecurityFilter;
   WHILE @@FETCH_STATUS = 0
      BEGIN
      INSERT INTO PERMISSIONLOG(RoleID, Objecttype, ObjectID, ReadPermission,
           InsertPermission, ModifyPermission, DeletePermission, ExecutePermission, SecurityFilter, ExecutingUser) VALUES (@RoleID, @Objecttype, @ObjectID, @ReadPermission,
           @InsertPermission, @ModifyPermission, @DeletePermission, @ExecutePermission, @SecurityFilter, @navuser);
            FETCH NEXT FROM Item_Cursor into @RoleID, @Objecttype, @ObjectID, @ReadPermission,
           @InsertPermission, @ModifyPermission, @DeletePermission, @ExecutePermission, @SecurityFilter;
      END;
      
   
   CLOSE Log_Cursor;
   DEALLOCATE Log_Cursor;

END
GO


das ganze ist aber UNGETESTET!

Volker

Edit:
Aktuelles Datum/Uhrzeit sollte man vielleicht noch einfügen.