有没有办法审核 MySQL 的登录?我希望能够为每个员工创建一个用户名,从而创建登录的审计跟踪。然而,谷歌搜索没有出现好的结果。
我们可以审计的越多越好。至少,知道谁何时登录会很好。最好看看谁在什么时候执行了什么查询。日志主要是为了告诉客户我们有它们,因为数据库中有潜在的敏感信息。
显然,能够审计每个用户(以及何时)执行的查询也将使我们能够更好地查明安全问题的原因,如果出现安全问题。
我目前正在使用更改数据捕获 (CDC)来跟踪数据更改,并且我希望跟踪提交进行更改的查询的客户端的主机名和 IP 地址。如果有 5 个不同的客户端通过相同的用户名登录,一个人面临着跟踪这 5 个中哪一个触发了查询的难题。我发现的其他似是而非的解决方案包括使用以下命令更改 CDC 表:
ALTER TABLE cdc.schema_table_CT
ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME())
Run Code Online (Sandbox Code Playgroud)
但是,这将返回触发查询的服务器的主机名,而不是触发查询的客户端的主机名。
有没有办法解决这个问题?有助于记录客户端的主机名或 IP 地址(或某种其他类型的唯一身份)的东西。我不想使用触发器,因为它会减慢系统速度,而且 CDC 还会生成系统表,因此显然不可能使用触发器。
背景资料:
SYSTEM_USER在触发器中调用时,结果总是相同的。UserId每次完成 DML 时都会为其提供一个字符串(仅在存储过程中完成)。我遇到的问题是,当用户删除记录时,我想知道是谁做的。因为它将通过相同的登录完成,我不想看到所有操作都是由服务完成的,我想看看是哪个用户完成的。这不是更新的问题,因为我们有ModifiedBy将通过发送的UserId更新来更新的列。
问题是:有没有办法在SYSTEM_USER运行删除时设置或以其他方式将用户信息放入触发器中?
我现在拥有的“最佳”想法,虽然我不确定这是否是一个好主意,但在服务中,我检查当前UserId是否以用户身份存在于数据库中,如果没有,则创建一个用户为他们反对。然后运行存储过程EXECUTE AS User = @UserId。然后当 DML 在存储过程中完成并且触发器触发时,SYSTEM_USER应该从EXECUTE AS.
我即将进行审计,我想知道审计员在审计 ERP 系统的数据库时会寻找哪些物理、电子和逻辑访问控制。我对这个过程真的很陌生,任何指导将不胜感激。
我想在我的数据库上设置一个审计跟踪类型的系统来监视UPDATE/INSERT具有非常高活动的特定表上的语句。我面前有两个选择:使用 SQL Server 内置审计系统或使用扩展事件。
由于 SQL Server 审计在内部使用扩展事件,我认为当我直接使用审计而不是扩展事件时会产生某种开销。
有什么办法可以做一些测试来分析哪个系统对服务器的影响更大?如果我能知道创建任何 XE 会话时实际发生的情况,它将帮助我分析对服务器的影响。
由于开销,我们考虑了触发器并忽略了该选项。但这只是根据互联网上的信息决定的。
我必须在具有许多(50 多个)表的数据库中实施审计。我希望将用户名和用户将记录更改为所有表的列的时间。但是,有些表已经有了这些列,所以我不需要将这些列添加到所有表中。假设列名是DateTime_Tableand UserName_Table,如果列不存在,我如何向数据库中的所有表添加DateTime_Table column和UserName_Table列?
我看到了 Postgres 的这个循环,但我需要 SQL Server 的帮助。
最近几个月我发生了三起事件,其中表中的记录已被删除或整个表中的值更新为零。我们有一个由四人组成的团队,他们拥有权限并负责更新本可以执行此操作的数据库。令人失望的是,没有人承认进行了这些更改。
展望未来,我希望能够记录这些交易。我想知道其他人用什么来跟踪这些变化?他们使用跟踪更改的软件还是创建存储过程或跟踪文件?如果有人在他们的设施中设置了这个,我想知道他们使用什么。跟踪文件确实有我想要的信息,例如登录名机器号和 sql 语句,因此如果我提前设置它们,它将为我提供信息。
当这些更改发生时,我有数据库和事务日志的副本。我能用这些旧文件做些什么来帮助追查罪魁祸首吗?预先感谢任何回复的人。我们使用的是 SQL Server 2005。
我想看看授予特定表的权限是否有任何更改。
例如,我不想让登录名“John”拥有SELECT对表 Invoices的权限。
如果这个许可是GRANTed给约翰的,我想知道。我想知道是谁授予了他的许可,什么时候授予的。
我正在使用 SQL Server 2012 企业版。
我正在设置数据库审计。我想捕获除与应用程序相关的服务帐户之外的数据库用户发出的任何 DML 更改。
简而言之,这是为了向我们的外部审计员证明没有用户在应用程序之外篡改数据。
以下脚本设置了对所有原则通用的 DML 审计。
CREATE DATABASE AUDIT SPECIFICATION [OurDatabaseAuditSpec]
FOR SERVER AUDIT [OurAudit]
ADD (DELETE ON OBJECT::[dbo].[SensitiveData] BY [public]),
ADD (INSERT ON OBJECT::[dbo].[SensitiveData] BY [public]),
ADD (UPDATE ON OBJECT::[dbo].[SensitiveData] BY [public])
WITH (STATE = ON)
GO
Run Code Online (Sandbox Code Playgroud)
我如何修改此审计规范以捕获除应用程序服务帐户正在执行的操作之外的所有内容?
我仅限于单独指定每个原则还是可以指定一个例外?通过 BOL 阅读似乎我只能列出要审核的原则 - 而不是要忽略的原则。
我不是受过训练的 DBA,但我管理一个使用 SQL Server 作为后端的软件应用程序。应用程序管理“项目”,每个项目都有自己的数据库。
由于通过应用程序报告的限制,我们设置了一个对所有项目数据库具有只读权限的通用 SQL Server 用户帐户。用户利用该帐户通过 ODBC 进行连接并执行查询。
现在我想审计这些连接——它们何时发生以及连接到哪个数据库。
有人可以帮助我吗?
我对 SQL Server 本身具有管理访问权限。我对 SQL 语法有非常基本的了解。不过,我完全不了解 SQL Server 的审计功能。
提前致谢!
audit ×10
sql-server ×7
dml ×1
mysql ×1
oracle ×1
permissions ×1
security ×1
trigger ×1
users ×1