【发布时间】:2022-01-20 02:55:28
【问题描述】:
我们的 SQL Server 数据库有 Windows 身份验证。
每个对象都被创建为dbo,我不介意。但我们无法追踪谁创造了什么?有人可以帮助我们如何管理它,以便我们至少可以跟踪谁在做什么?跟踪中的登录名也是通用的
登录名 - ABC\gMSA_SQL$
如果我使用 Windows 身份验证登录服务器并运行以下命令选择 SUSER_NAME(),我可以看到我的用户名,而不是通用用户名。那么现在如果我创建一个表,我可以从哪里获得这个用户名?
【问题讨论】:
-
架构不是你想用来跟踪谁创造了东西。那真是太可怕了。您可以使用默认跟踪来查看架构更改,但这只能追溯到一点点。您是否对数据库使用源代码控制?
-
如果每个用户都应该创建属于他们并且只有他们使用的东西,也许每个用户都应该拥有自己的数据库。否则我同意肖恩的观点——模式不是你跟踪事物的方式。您可以继续使用DDL triggers,但正如他所建议的那样,您只会从the default trace 获得这么多过去的信息。
-
@AaronBertrand 谢谢。我只是想找到一种方法来跟踪,因为目前的一切都非常通用。我现在肯定会加入 DDL 触发器,但我必须确认我是否获得了正确的用户名。有多个包含大量数据的数据库,但至少在未来,我们将对谁在做什么进行某种跟踪。我不介意获取任何我可以获得的历史记录。
-
嘿@sean,我们没有 dba,我更像是一名开发人员,数据库一团糟。我们无法跟踪谁创建了什么,因为我们启用了 Windows 身份验证。如果我使用此命令(选择 SUSER_NAME()),我可以看到我的用户名。我想找到这个用户名来创建对象,即使它不会回到历史很长时间,我需要找到它并开始将它保存在用户日志表中以跟踪 DDL 更改/更新。我可以看到的登录名在任何地方都是通用的。架构更改历史记录还具有每个对象的通用用户名。任何人都可以在服务器上创建任何东西。
-
这是一个 DDL 日志记录的示例实现。请注意,它使用
SUSER_SNAME()mssqltips.com/sqlservertip/2085/… 我无法从您的 cmets 中得知您目前是否遇到SUSER_SNAME()不正确的问题?
标签: sql-server security windows-authentication user-management