Quelque chose de grave s'est produit hier.
Une vue créée il y a quelque temps a été modifiée par quelqu'un qui a finalement rompu les rapports. Malheureusement. quelqu'un (sciemment ou inconsciemment) a fait cette modification dans la base de données PRODUCTION.
Ma question: existe-t-il un moyen (script / logiciel / freeware, etc.) par lequel nous pouvons savoir qui (nom d'utilisateur) a effectué cette modification, afin que je puisse révoquer l'accès à la base de données de production pour cet utilisateur.
Si ma question n'est pas claire, veuillez commenter.
la source
Object:Created
événement ainsi que la vue a été supprimée et créée plutôt que modifiée. Vous ne savez pas ce que vous entendez par ne pas exécuter sur le serveur? Vous devez bien sûr être connecté à la bonne instance, mais peu importe d'où vient la connexion tant que vous disposez des autorisations.SELECT path FROM sys.traces where is_default=1
Martin a déjà indiqué la meilleure avenue, la trace d'audit administratif qui est généralement activée (sauf si elle a été explicitement désactivée). Si vous ne trouvez pas les informations dans la trace d'administration (a été désactivée ou recyclée), vous pouvez récupérer les informations à partir des sauvegardes du journal. Puisqu'il s'agit d'une base de données de production, je suppose que vous avez un cycle de sauvegarde régulier, avec des sauvegardes complètes périodiques et des sauvegardes de journaux. Vous devrez restaurer, sur un serveur distinct, la base de données à peu près au moment de l'incident afin que la DDL se trouve dans le journal restauré actuel. Il suffit ensuite d'utiliser
fn_dblog()
et d'inspecter le journal.Une façon consiste à passer par les opérations de début de transaction:
Si le a
ALTER VIEW
été émis dans une transaction autonome (c'est-à-dire non entouré deBEGIN TRANSACTION
/COMMIT
), il démarrera une transaction nomméeCreatProc transaction
. Recherchez-le et[Transaction SID]
c'est le SID de connexion que vous souhaitez.Une autre possibilité consiste à rechercher la transaction qui a acquis un SCH_M sur la vue que vous souhaitez:
Notez que si la vue a été modifiée par DROP suivi de CREATE, l'ID d'objet a probablement été modifié, mais au moins vous obtiendrez la transaction qui a fait la dernière CREATE (l'ID d'objet actuel de la vue dans la base de données restaurée). Avec l'ID de transaction, vous revenez en arrière et récupérez les informations de début de transaction:
Le [Transaction SID] est, encore une fois, votre gars. Utilisez
SUSER_SNAME
pour récupérer le nom de connexion à partir du SID de connexion. Si le SID est 0x01, cela signifie que la connexion étaitsa
, ce qui signifie que toute personne connaissant lesa
mot de passe aurait pu le faire.la source
Non, sauf si vous l'avez connecté via un déclencheur DDL ou autre
Vous voulez voir qui en tant que droits ALTER dans cette base de données ou appartenance au rôle sysadmin / db_owner / ddl_admin. Ce serait mieux comme un examen général plutôt qu'une chasse aux sorcières. Il y a probablement d'autres personnes autorisées à apporter des modifications non approuvées et non autorisées
la source
Si vous ne l'avez pas déjà fait, vous pouvez consulter le rapport Historique des modifications de schéma disponible dans SQL Server Management Studio. Il semble que SQL Server enregistre les modifications par défaut ( trace par défaut ) et vous devriez pouvoir afficher ces données via ce rapport. La seule chose regrettable est que ces fichiers de trace sont automatiquement supprimés / reconduits au fil du temps, de sorte que les données peuvent déjà avoir disparu. Bonne chance!
la source