IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Login encore utilisé? [2008]


Sujet :

Administration SQL Server

  1. #1
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut Login encore utilisé?
    Bonjour à tous,

    Je dois savoir si 3 logins sont encore utilisés sur 19 instances et accèdent aux trentaines de DB par instance.

    Alors j'ai cherché, et j'ai trouvé simplement ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from sys.syslogins
    Sauf que le accdate n'est pas documenté et ne me montre pas si le login a été utilisé.

    Une trace, bof je trouve car tous sont de la PROD, et je dois vérifier ça sur 7 jours.

    Un trigger, j'aime pas trop non plus.

    J'ai pensé aller voir le SQL Server Logs pour les connexions, mais il n'enregistre que les connexions Failed.

    J'avais aussi pensé à un audit de DB, mais ça va en faire beaucoup à mettre en place...

    Extended Events, il n'y a pas sur SQL 2008...

    Savez-vous comment je pourrais faire?
    Est qu'un audit server ferait ça? Si oui, comment?

    Merci d'avance.
    Ce que nous avons fait pour nous-même meurt avec nous, ce que nous avons fait pour les autres et le monde est immortel. Albert Pike

    http://www.datacrossroad.be

  2. #2
    Invité
    Invité(e)
    Par défaut
    j'avais fait ça en m'inspirant de ce script : http://www.sqlservercentral.com/blog...in-sql-server/
    J'ai remarqué qu'il y avait tout de même quelques évènements qui n'étaient pas tracés correctement, mais ça m'a donné de bon résultat !
    Je n'ai pas supprimé de comptes encore utiles !
    Enfin, juste ceux qui servent chaque trimestre !


    Il y a aussi le paramètre de l'instance «Login auditing» que tu peux passer à «both failed and successful login» mais ça risque de tellement surcharger le ERRORLOG que ça sera plus nuisible qu'autre chose.

  3. #3
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Il y a aussi le paramètre de l'instance «Login auditing» que tu peux passer à «both failed and successful login» mais ça risque de tellement surcharger le ERRORLOG que ça sera plus nuisible qu'autre chose.
    Oui, mais cela oblige le redémarrage de l'instance si je ne me trompe pas, donc pas génial pour 19 instances de prod.

    Je vais regarder le script, merci.
    Ce que nous avons fait pour nous-même meurt avec nous, ce que nous avons fait pour les autres et le monde est immortel. Albert Pike

    http://www.datacrossroad.be

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par janlouk Voir le message
    Oui, mais cela oblige le redémarrage de l'instance si je ne me trompe pas, donc pas génial pour 19 instances de prod.
    Effectivement !
    Pour le script, je peux te sortir mon script qui stocke ça dans une nouvelle bd. Donne-moi 10 minutes.

  5. #5
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Pour le script, je peux te sortir mon script qui stocke ça dans une nouvelle bd
    Je prends, merci
    Ce que nous avons fait pour nous-même meurt avec nous, ce que nous avons fait pour les autres et le monde est immortel. Albert Pike

    http://www.datacrossroad.be

  6. #6
    Invité
    Invité(e)
    Par défaut
    Voici ma version du script d'audit dont je parlais ci-dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
     
    -- Logging_Audit
    USE [master]
    GO
     
    CREATE DATABASE [Logging_Audit]
    GO
     
    -- penser à mettre SA comme owner de la bd
    USE [Logging_Audit]
    GO
    EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
    GO
     
    USE [Logging_Audit]
    GO
     
    /****** Object:  Table [dbo].[log_traces]    Script Date: 12/13/2011 10:33:21 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
     
    CREATE TABLE [dbo].[log_traces](
    	[LoggingID] [bigint] IDENTITY(1,1) NOT NULL,
    	[EventTime] [datetime] NULL,
    	[EventType] [varchar](255) NULL,
    	[LoginName] [varchar](255) NULL,
    	[HostName] [varchar](255) NULL,
    	[DatabaseName] [varchar](255) NULL,
    	[ApplicationName] [varchar](255) NULL,
     CONSTRAINT [PK_log_traces] PRIMARY KEY CLUSTERED 
    (
    	[LoggingID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    SET ANSI_PADDING OFF
    GO
     
     
    /****** Object:  StoredProcedure [dbo].[sp_log_traces_Event_Insertion]    Script Date: 12/13/2011 10:33:21 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE PROCEDURE [dbo].[sp_log_traces_Event_Insertion]
    AS
    SET NOCOUNT ON;
    DECLARE @message_body XML
    DECLARE @message_type_name NVARCHAR(255)
    DECLARE @dialog UNIQUEIDENTIFIER 
     
    --Endless loop
    WHILE (1 = 1)
    BEGIN
        BEGIN TRANSACTION ;
        -- Receive the next available message
        WAITFOR (
            RECEIVE TOP(1) @message_type_name=message_type_name, @message_body=message_body, @dialog = conversation_handle
                FROM log_traces_Queue
        ), TIMEOUT 2000
     
    	--Rollback and exit if no messages were found
    	IF (@@ROWCOUNT = 0)
        BEGIN
            ROLLBACK TRANSACTION ;
            BREAK ;
        END ;
     
       --End conversation of end dialog message
        IF (@message_type_name = 'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog')
        BEGIN
            PRINT 'End Dialog received for dialog # ' + cast(@dialog as nvarchar(40)) ;
            END CONVERSATION @dialog ;
        END ;
        ELSE
        BEGIN
    			INSERT INTO log_traces (EventTime,EventType,LoginName,HostName,
    					DatabaseName,
    					ApplicationName )
    			VALUES (
    				CAST(CAST(@message_body.query('/EVENT_INSTANCE/PostTime/text()') AS VARCHAR(64)) AS DATETIME),
    				CAST(@message_body.query('/EVENT_INSTANCE/EventType/text()') AS VARCHAR(255)),
    				CAST(@message_body.query('/EVENT_INSTANCE/LoginName/text()') AS VARCHAR(255)),
    				CAST(@message_body.query('/EVENT_INSTANCE/HostName/text()') AS VARCHAR(255)),
    				case when CAST(@message_body.query('/EVENT_INSTANCE/DatabaseName/text()') AS VARCHAR(255)) = ''
    					then db_name ( CAST(CAST(@message_body.query('/EVENT_INSTANCE/DatabaseID/text()') AS VARCHAR(64)) AS INTEGER) )
    					else CAST(@message_body.query('/EVENT_INSTANCE/DatabaseName/text()') AS VARCHAR(255))
    				end ,
    				CAST(@message_body.query('/EVENT_INSTANCE/ApplicationName/text()') AS VARCHAR(255))
    				)
    	END
    	COMMIT TRANSACTION
     
    	-- PURGE au delà d'un mois
    	declare @premier_event datetime
    	; with SR AS ( select min(loggingId) min_loggingId from dbo.log_traces )
    	select @premier_event = LT.EventTime from dbo.log_traces LT
    	join SR on SR.min_loggingId = LT.loggingId
    	if @premier_event < DATEADD(month, -1,  cast( convert(varchar, getdate() , 111 ) as datetime) )
    		delete dbo.log_traces
    		where EventTime <= DATEADD(month, -1,  cast( convert(varchar, getdate() , 111 ) as datetime) )
    END
    GO
     
    --------------------------------------------------------------------------------------------------------
     
    USE [master]
    GO
    ----Enable service broker
    ALTER DATABASE Logging_Audit SET ENABLE_BROKER
    GO
     
     
    USE [Logging_Audit]
    GO
     
    --The queue
    CREATE QUEUE log_traces_Queue
    GO
     
    --The service
    CREATE SERVICE log_traces_Service
    	ON QUEUE log_traces_Queue
    		([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification])
    GO
     
    --The route
    CREATE ROUTE log_traces_Route
    	WITH SERVICE_NAME = 'log_traces_Service',
    	ADDRESS = 'LOCAL'
    GO
     
    -------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------
     
    CREATE EVENT NOTIFICATION log_traces_Event_Notification
    	ON SERVER
    	FOR AUDIT_LOGIN, AUDIT_LOGOUT, AUDIT_LOGIN_FAILED
    	TO SERVICE 'log_traces_Service', 'current database'
    GO
     
    ALTER QUEUE log_traces_Queue
    	WITH ACTIVATION (
    	STATUS = ON,
    	PROCEDURE_NAME = sp_log_traces_Event_Insertion ,
    	MAX_QUEUE_READERS = 2, EXECUTE AS SELF 
    )
    GO
     
    -------------------------------------------------------------------------------------
     
    create View [dbo].[Log_view_rapport] as 
    SELECT [DatabaseName],[LoginName], [EventType],count(*) Card
    FROM [dbo].[log_traces]
    group by [DatabaseName],[EventType],[LoginName]
    GO
     
    -------------------------------------------------------------------------------------
     
    select top 500 * 
    from [Logging_Audit].dbo.log_traces
    order by 1 desc 
     
    select * from [Logging_Audit].[dbo].[Log_view_rapport]

  7. #7
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Ca fonctionne bien, merci.

    Petite question, je n'ai jamais utilisé le Service Broker. Comment est-ce que je peux revenir en arrière et tout supprimer? Il ne laisse rien "trainer" quelque part?

    Pour les performances, ce n'est pas impactant?

    Si je veux qu'il n'enregistre que 3 logins, genre login1, login2 et login3, je peux mettre ça où?
    Ce que nous avons fait pour nous-même meurt avec nous, ce que nous avons fait pour les autres et le monde est immortel. Albert Pike

    http://www.datacrossroad.be

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par janlouk Voir le message
    Petite question, je n'ai jamais utilisé le Service Broker. Comment est-ce que je peux revenir en arrière et tout supprimer? Il ne laisse rien "trainer" quelque part?
    Je ne suis pas non plus un grand expert du Service Broker mais voici le script de suppression. Ça nettoie bien, je n'ai jamais trouvé de déchets qui trainaient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    USE [Logging_Audit]
    GO
     
    DROP SERVICE log_traces_Service
    GO
     
    DROP QUEUE log_traces_Queue
    GO
     
    DROP EVENT NOTIFICATION log_traces_Event_Notification
    	ON SERVER
    GO
     
    DROP ROUTE log_traces_Route
    Go
     
     
    DROP PROCEDURE [dbo].[sp_log_traces_Event_Insertion]
    GO
     
    DROP View [dbo].[Log_view_rapport]
    GO
     
    drop table dbo.log_traces
    GO
    Citation Envoyé par janlouk Voir le message
    Pour les performances, ce n'est pas impactant?
    Je n'ai jamais rien remarquer de notable, que ce soit sur la grosse bd de prod très active ou sur un SQL Server Express tout moisi sur disque externe !

    Citation Envoyé par janlouk Voir le message
    Si je veux qu'il n'enregistre que 3 logins, genre login1, login2 et login3, je peux mettre ça où?
    Dans le procédure sp_log_traces_Event_Insertion qui boucle :
    au niveau du insert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF CAST(@message_body.query('/EVENT_INSTANCE/HostName/text()') AS VARCHAR(255)) <> 'LeNomDeMaMachine'
    	and CAST(@message_body.query('/EVENT_INSTANCE/LoginName/text()') AS VARCHAR(255)) not in ( 'DEVCOM\7gyY9w1ZY6ySRgPeaefZ' )
    	INSERT INTO log_traces (.....

  9. #9
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Génial, merciiiii
    Ce que nous avons fait pour nous-même meurt avec nous, ce que nous avons fait pour les autres et le monde est immortel. Albert Pike

    http://www.datacrossroad.be

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Citation Envoyé par janlouk
    J'ai pensé aller voir le SQL Server Logs pour les connexions, mais il n'enregistre que les connexions Failed.
    Exact, mais tu peux activer l'audit des connexions quel que soit le résultat de celle-ci :

    Nom : 0AwDa4a.png
Affichages : 94
Taille : 29,0 Ko

    On peut ensuite lire le log à l'aide de la procédure xp_readerrorlog, à la recherche des logins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC xp_readerorrlog 0, 1, 'monLogin', NULL, 'DateDebut', 'DateFin'
    Où DateDebut et DateFin sont au format ISO : AAAAMMJJ HH:mm:ss.fff

    @++

  11. #11
    Membre expérimenté
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Points : 1 736
    Points
    1 736
    Par défaut
    Merci Nicolas, mais comme je disais plus haut, comme il faut un redémarrage de l'instance, c'est une grosse contrainte dans mon cas
    Ce que nous avons fait pour nous-même meurt avec nous, ce que nous avons fait pour les autres et le monde est immortel. Albert Pike

    http://www.datacrossroad.be

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. USA : XP est encore utilisé par 53% des entreprises
    Par Stéphane le calme dans le forum Actualités
    Réponses: 15
    Dernier message: 03/08/2014, 22h18
  2. Réponses: 4
    Dernier message: 07/03/2014, 20h47
  3. Login utilisé par les process internes
    Par Oratorio dans le forum Oracle
    Réponses: 0
    Dernier message: 10/07/2012, 11h22
  4. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  5. TPalette (encore)
    Par Flipper dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2002, 23h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo