bca*_*asp 45 sql t-sql sql-server-2005
我正在尝试通过我们的开发数据库,并清理一些旧的测试过程/表.是否可以确定用户在SQL Server 2005数据库中创建了哪些对象?如果是这样,我将如何找到这些信息?
编辑:只是想澄清有问题的对象已经存在.设置审计和触发器可能对我没什么好处.我想我主要是在寻找一种方法来使用系统表/视图来获取信息.
Gui*_*rez 45
如果最近创建了该对象,则可以在SQL Server Management Studio中检查"架构更改历史记录"报告,该报告"提供默认跟踪记录的数据库中所有已提交的DDL语句执行的历史记录":

然后,您可以搜索对象的create语句.在显示的所有信息中,有登录名执行DDL语句.
Phi*_*ley 29
答案是"不,你可能不会".
虽然那里有东西可能会说谁创造了一个给定的对象,但它们背后有很多"ifs".快速(并不一定完整)评论:
sys.objects(以及sys.tables,sys.procedures,sys.views等)具有列principal_id.此值是与数据库用户列表相关的外键,而后者又可以与SQL(实例)登录列表连接.(所有这些信息都可以在其他系统视图中找到.)
但.
在这里我们设置和BOL的粗略审查快速检查表明,该值仅设置(即不空),如果它是"从架构所有者不同".在我们的开发系统中,我们有dbo +两个其他模式,所有内容都是NULL.这可能是因为每个人都拥有这些数据库中的dbo权限.
这是使用NT身份验证.SQL身份验证可能大致相同.此外,每个人都拥有并使用唯一的登录信息,还是共享?如果您有员工流失并且域(或SQL)登录被删除,则数据可能不再存在或可能不完整.
您可以查看此数据(select*from sys.objects),但如果principal_id为null,则可能运气不佳.
Cru*_*lIO 19
如果每个用户都有自己的SQL Server登录,您可以尝试这样做
select
so.name, su.name, so.crdate
from
sysobjects so
join
sysusers su on so.uid = su.uid
order by
so.crdate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
117488 次 |
| 最近记录: |