确定SQL Server中用户创build的对象

我正试图通过我们的开发数据库,​​并清理了一些旧的testing过程/表。 是否有可能确定SQL Server 2005数据库中的用户创build的对象? 如果是这样,我将如何去find这些信息?

编辑:只是想澄清,有问题的对象已经存在。 设置审计和触发器可能不会对我很好。 我想我主要是在寻找一种方法来使用系统表/视图来获取信息。

答案是“不,你可能不能”。

虽然那里有东西可以说是谁创造了一个给定的对象,但他们背后有很多“ifs”。 一个快速的(不一定是完整的)评论:

sys.objects(sys.tables,sys.procedures,sys.views等)有一个principal_id列。 此值是与数据库用户列表相关的外键,而该用户列表又可以与SQL(实例)login列表连接。 (所有这些信息都可以在更多的系统视图中find。)

但。

快速检查我们在这里的设置和粗略的BOL检查表明,如果这个值是“不同于模式所有者”,那么这个值只被设置(即不为空)。 在我们的开发系统中,我们已经有了dbo +两个其他模式,所有东西都是NULL。 这可能是因为每个人在这些数据库中都有权利。

这是使用NT身份validation。 SQL身份validation可能工作非常相似。 另外,每个人都有, 并使用独特的login,或他们共享? 如果您的员工stream失和域名(或SQL)login被丢弃,那么数据可能不会再存在或可能不完整。

你可以看看这个数据(select * from sys.objects),但是如果principal_id为null,那么你可能运气不好。

如果最近创build了该对象,则可以检查SQL Server Management Studio中的“架构更改历史logging”报告,该报告“提供了由默认跟踪logging的数据库中的所有提交的DDL语句执行历史logging”:

在这里输入图像说明

然后您可以search对象的创build语句。 在所有显示的信息中,有执行DDL语句的人的login名。

如果每个用户都有自己的SQL Serverlogin,那么可以试试这个

select so.name, su.name, so.crdate from sysobjects so join sysusers su on so.uid = su.uid order by so.crdate 

如果您需要一个小而特定的机制,您可以searchDLL触发器信息。

你有没有试过这个查询:

 SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,* FROM sys.dm_db_index_usage_stats WHERE database_id = DB_ID( '<db name>') AND OBJECT_ID=OBJECT_ID('<table name>')