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

简介: 在系统视图sys.syslogins中,有createdate与updatedate两个字段,分别表示创建登录名与更新登录名的日期,如果你用updatedate的值来判断一个登录名的权限是否被修改过,那么你就要跳坑里了。

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

 

 

USE [master]

GO

CREATELOGIN [kerry] WITHPASSWORD=N'kerry123456',DEFAULT_DATABASE=[AdventureWorks2014],CHECK_EXPIRATION=OFF,CHECK_POLICY=OFF

GO

USE [AdventureWorks2014]

GO

CREATEUSER [kerry] FORLOGIN [kerry]

GO

USE [AdventureWorks2014]

GO

ALTERROLE [db_datareader] ADD MEMBER [kerry]

GO

 

 

 

USEmaster;

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,就是我创建该登录名的时间。

 

 

clip_image001

 

 

 

USE AdventureWorks2014;

GO

 

SELECT  name ,

      createdate ,

      updatedate

FROM   sys.sysusers

WHERE   name ='kerry';

 

 

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

 

 

 

clip_image002

 

 

 

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

 

 

 

USE [AdventureWorks2014]

GO

ALTERROLE [db_datawriter] ADD MEMBER [kerry]

GO

USE [AdventureWorks2014]

GO

ALTERROLE [db_ddladmin] ADD MEMBER [kerry]

GO

 

 

 

 

 

clip_image003

 

 

 

 

USE AdventureWorks2014;

GO

 

SELECT  name ,

      createdate ,

      updatedate

FROM  sys.sysusers

WHERE  name ='kerry';

 

 

 

 

 

image

 

 

 

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

 

ALTERSERVERROLE [processadmin] ADD MEMBER [kerry]

GO

 

 

 

 

image

 

 

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

 

 

 

ALTERLOGIN [kerry] ENABLE

GO

 

ALTERLOGIN [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)

ORDERBY trcdata.StartTime

                 --trcdata.DatabaseID

                 --trcdata.TargetLoginName

 

 

image

 

 

 

 

 

参考资料:

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

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

相关文章
|
10月前
|
SQL 索引
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
|
SQL 存储 数据库
SQL部分字段编码设置技巧与方法
在SQL数据库管理中,设置字段的编码对于确保数据的正确存储和检索至关重要
|
SQL 存储 Serverless
SQL语句拆分时间字段的技巧与方法
在数据库操作中,经常需要处理时间数据
1105 1
|
SQL 存储 关系型数据库
SQL判断CHAR类型字段不为空的方法与技巧
在SQL查询中,判断一个CHAR类型字段是否不为空是一个常见的需求
|
SQL Oracle 关系型数据库
SQL如何添加字段记录:详细步骤与技巧
在数据库管理中,经常需要向已有的表中添加新的字段(列)或向表中插入新的记录
3231 5
sqlserver实现取相同名称放在同一字段
sqlserver实现取相同名称放在同一字段
138 2
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
394 9
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
283 6
|
SQL Java Scala
flink-cdc SQL Server op 字段如何获取?
Flink CDC 是 Apache Flink 的组件,用于捕获数据库变更事件。对 SQL Server,通过 Debezium 连接器支持变更数据捕获。`op` 字段标识操作类型(INSERT、UPDATE、DELETE)。配置包括添加依赖及设定 Source 连接器,可通过 Flink SQL 或 Java/Scala 完成。示例查询利用 `op` 字段筛选处理变更事件。
638 1