码迷,mamicode.com
首页 > 数据库 > 详细

SQL Server中sys.syslogin中updatedate字段的浅析

时间:2017-06-08 00:11:12      阅读:575      评论:0      收藏:0      [点我收藏+]

标签:png   reader   ack   禁用   不能   isp   src   分享   class   

在系统视图sys.syslogins中,有createdate与updatedate两个字段,分别表示创建登录名与更新登录名的日期,如果你用updatedate的值来判断一个登录名的权限是否被修改过,那么你就要跳坑里了。当然sys.sysusers视图里面updatedate字段也不能作为某个user权限最后一次修改的依据,如下测试所示:

 

 

USE [master]

GO

CREATE LOGIN [kerry] WITH PASSWORD=N‘kerry123456‘, DEFAULT_DATABASE=[AdventureWorks2014], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

GO

USE [AdventureWorks2014]

GO

CREATE USER [kerry] FOR LOGIN [kerry]

GO

USE [AdventureWorks2014]

GO

ALTER ROLE [db_datareader] ADD MEMBER [kerry]

GO

 

 

 

USE master;

GO

SELECT  name ,

        createdate ,

        updatedate ,

        accdate ,

        dbname

FROM    sys.syslogins

WHERE   name = ‘kerry‘;

 

 

 

如下截图所示,sys.syslogins中,name为kerry的这条记录的createdate与updatedate字段值为2017-06-07 11:45:48:527,就是我创建该登录名的时间。

 

 

技术分享

 

 

 

USE AdventureWorks2014;

GO

 

SELECT  name ,

        createdate ,

        updatedate

FROM    sys.sysusers

WHERE   name = ‘kerry‘;

 

 

sys.sysusers中的namekerry的这条记录的createdateupdatedate字段值也是同一个值。如下所示:

 

 

 

技术分享

 

 

 

我们修改kerry的权限,发现sys.syslogins和sys.sysusers中updatedate字段的值均没有变化

 

 

 

USE [AdventureWorks2014]

GO

ALTER ROLE [db_datawriter] ADD MEMBER [kerry]

GO

USE [AdventureWorks2014]

GO

ALTER ROLE [db_ddladmin] ADD MEMBER [kerry]

GO

 

 

 

 

 

技术分享

 

 

 

 

USE AdventureWorks2014;

GO

 

SELECT  name ,

        createdate ,

        updatedate

FROM    sys.sysusers

WHERE   name = ‘kerry‘;

 

 

 

 

 

技术分享

 

 

 

当然,如果你修改登录名(login)的SERVER ROLE权限,那么updatedate字段就会变化,如下测试所示

 

ALTER SERVER ROLE [processadmin] ADD MEMBER [kerry]

GO

 

 

 

 

技术分享

 

 

另外测试发现,启用或禁用DISABLE登录名,sys.syslogins中这个字段updatedate的值是会变化的

 

 

 

ALTER LOGIN [kerry] ENABLE

GO

 

ALTER LOGIN [kerry] DISABLE

GO

 

 

这里就不研究sys.sysusers在什么条件下会触发updatedate字段会更新。 那么如何查看某个账号的权限被变跟过呢? 这个只能用触发器或开启审计,当然也可以用下面脚本,但是这个是有很强的时效性的

 

 

DECLARE @tracefile VARCHAR(500)

-- Get path of default trace file

SELECT @tracefile = CAST(value AS VARCHAR(500))

FROM ::fn_trace_getinfo(DEFAULT)

WHERE traceid = 1

AND property = 2

 

-- Get security changes from the default trace

SELECT *

FROM ::fn_trace_gettable(@tracefile, DEFAULT) trcdata -- DEFAULT means all trace files will be read

INNER JOIN sys.trace_events evt ON trcdata.EventClass = evt.trace_event_id

WHERE trcdata.EventClass IN (102, 103, 104, 105, 106, 108, 109, 110, 111)

ORDER BY trcdata.StartTime

                 --trcdata.DatabaseID

                 --trcdata.TargetLoginName

 

 

技术分享

 

 

 

 

 

参考资料:

https://msdn.microsoft.com/zh-cn/library/ms178593.aspx

https://msdn.microsoft.com/zh-cn/library/ms179871.aspx

SQL Server中sys.syslogin中updatedate字段的浅析

标签:png   reader   ack   禁用   不能   isp   src   分享   class   

原文地址:http://www.cnblogs.com/kerrycode/p/6959570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!