1

我本可以发誓我之前从 sys 视图或数据管理视图中这样做过,并在某处找到了信息。然而我找不到我的代码,也许我过去只是用扩展属性来做这件事,发现就像我在网上到处读到的那样,除了跟踪对象创建之外,这是无法做到的。谁能告诉我如果他们知道你能找到在 SQL Server 2008 R2 或更高版本的 TSQL 中创建过程的用户吗?

EG:我知道您可以在 sys.objects 中找到您的对象的名称以及修改时间,如下所示:

Select Top 10 *
from sys.objects o (nolock) 
where type = 'V'  -- View
and name like '%Finance%'  -- Finance in the name of the object somewhere

我知道有两个表包含有关用户帐户的信息(我知道您用来获取用户的表之一已被弃用,不确定它是否是其中之一):

Select Top 10 *
from sys.server_principals p (nolock) 
where p.type = 'U'

Select top 10 *
from sysusers

有没有办法找到创建它的对象或类似对象的 SID?检查此站点和其他站点时,我在网上发现“不”。有人知道吗?

4

1 回答 1

1

默认情况下,SQL Server 不跟踪谁创建了表,默认跟踪除外。因此,如果它是最近创建的,您可以在此处找到该信息:

DECLARE @path NVARCHAR(260);

SELECT 
   @path = REVERSE(SUBSTRING(REVERSE([path]), 
   CHARINDEX('\', REVERSE([path])), 260)) + N'log.trc'
FROM    sys.traces
WHERE   is_default = 1;

SELECT LoginName, StartTime
FROM sys.fn_trace_gettable(@path, DEFAULT)
WHERE EventClass = 46 AND EventSubClass = 0 
AND databaseName = N'Your database name'
AND objectName = N'The table name you are trying to track down'
ORDER BY StartTime DESC;

但是请注意,默认跟踪是滚动跟踪,数据回溯多远取决于服务器的工作负载。如果您想找出谁在 6 个月前创建了一张表,那么您很可能不走运。

您可以自己捕获这一点,继续前进,使用SQL Server AuditDDL 触发器或定期归档默认跟踪(我在此处展示如何执行此操作)。

于 2013-02-27T17:00:44.187 回答