我想经过我们的发展数据库,现在和清理一些老的测试特效/表。 是否有可能确定创建哪些用户对象在SQL Server 2005数据库? 如果是的话,我将如何去寻找这些信息?
编辑:只是想澄清,问题的对象已经存在。 建立审计和可能触发不会做我多好。 我想我主要是寻找一种方式来使用系统表/视图来获取信息。
我想经过我们的发展数据库,现在和清理一些老的测试特效/表。 是否有可能确定创建哪些用户对象在SQL Server 2005数据库? 如果是的话,我将如何去寻找这些信息?
编辑:只是想澄清,问题的对象已经存在。 建立审计和可能触发不会做我多好。 我想我主要是寻找一种方式来使用系统表/视图来获取信息。
答案是“没有,你可能无法”。
虽然有东西在那里,可以说谁创造了一个给定的对象,有很多“如果”他们身后的。 快速(不一定完整)的评论:
sys.objects中(并且因此SYS.TABLES,sys.procedures,sys.views等)具有列principal_id。 此值是涉及到数据库用户,这反过来又可以用SQL(实例)的登录名单中加入列表的外键。 (所有这些信息都可以在进一步的系统视图中找到。)
但。
在这里我们设置和BOL的粗略审查快速检查表明,该值仅设置(即不空),如果它是“从架构所有者不同”。 在我们的开发系统,我们已经有了DBO +其他两种模式,一切都出来作为NULL。 这可能是因为每个人都有这些数据库中的DBO权限。
这是使用NT验证。 SQL身份验证可能的工作原理大致相同。 此外,每个人都拥有并使用一个唯一的登录,或者他们共享? 如果有员工离职和域名(或SQL)登录掉下来,再一次数据可能不存在或可能不完整。
你可以看一下在这个数据(请从sys.objects中*),但如果principal_id为空,你很可能出于运气。
如果对象是最近创建的,您可以检查架构更改历史记录报告中,SQL Server Management Studio中,它“提供了默认的跟踪记录数据库中的所有承诺DDL语句执行的历史”中:
然后,您可以搜索对象的创建语句。 其中显示的所有信息,还有谁执行DDL语句的登录名。
如果每个用户都有自己的SQL Server登录,你可以试试这个
select
so.name, su.name, so.crdate
from
sysobjects so
join
sysusers su on so.uid = su.uid
order by
so.crdate
如果你需要一个小的和具体的机制,你可以搜索DLL触发器信息。
您是否尝试过这个查询:
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>')