SQL 2005找出谁创建了一个视图

时间:2009-06-16 21:52:49

标签: sql-server sql-server-2005 sql-server-2000

SQL是否存储有关最初创建视图的用户或最后修改过谁的信息?

3 个答案:

答案 0 :(得分:3)

现在为时已晚,但如果您使用的是2008,则可以创建audit来跟踪未来的变化。

编辑:找到它了!

    select p.name, v.* 
from sys.all_views v, sys.database_principals p, sys.schemas s
where p.principal_id = s.principal_id
and v.schema_id = s.schema_id
and v.name = 'your_view_name'

这将产生许多有关数据库中视图的有趣细节,包括柱principal_id。使用principal_id上的sys.database_principals加入用户名!

答案 1 :(得分:1)

我不确定是否有办法查看创建了视图,但sp_help会为您提供有关创建视图的信息

sp_help viewMyView

sp_help适用于任何和所有数据库对象BTW。

答案 2 :(得分:1)

SQL Server不存储有关谁创建或修改对象的显式信息。元数据目录中有关于谁是给定对象的所有者或该对象属于哪个模式的信息:

select * from sys.objects where object_id = object_id('<object name>');

根据对象类型,principal_id使用所有者的数据库主体ID填充,或者schema_id使用对象所属的模式的Id填充。所有模式都有一个所有者,可以从元数据目录中检索:

select * from sys.schemas

但请注意,这些只会显示对象的所有者。所有者不一定是指创建它或修改它的用户。可以使用ALTER AUTHORIZATION语句在创建期间或创建后更改对象的所有权,从而使所有权的标识充其量不可靠。此外,sysadmin角色的所有成员都映射到每个数据库中的相同数据库主体dbo。

要正确识别创建对象的用户,您应该部署审计方法,但这需要事先部署审计。如果未部署审计,可以在事后进行一些取证: