我们有一个表有一个很长的更新过程,我认为它来自一个不再使用的程序。似乎没有人能告诉我是否有人仍在使用它。
记录哪些用户从表中读取的最佳方法是什么?构建审计,或者我可以在某处挖掘系统日志以找到任何可能从中读取的用户?
谢谢你。
我们有一个表有一个很长的更新过程,我认为它来自一个不再使用的程序。似乎没有人能告诉我是否有人仍在使用它。
记录哪些用户从表中读取的最佳方法是什么?构建审计,或者我可以在某处挖掘系统日志以找到任何可能从中读取的用户?
谢谢你。
寻找一种方法来实现这个 STIG。当 SQL Server 由于“审核失败时关闭”而关闭时,我应该使用什么方法来监视它?
SQL Server 必须针对所有需要实时警报的审计失败事件向相应的支持人员提供即时实时警报。
我找到了事件 ID:33219
参数:
$recipients = "<[email protected]>,<[email protected]>"
Send-MailMessage -To $recipients -Subject "SQL Audit Failure" -Body "SQL has shutdown due to Audit Failure." -SmtpServer NameOrIPAddress -From [email protected] -Priority High
背景: 我试图记录用户在数据库中查询的内容。我发现的一个选项是创建服务器和数据库审计规范。我不想包含 INSERT 语句,因为将为插入的每条记录记录这些语句,如果将大量数据添加到表中,这将是很多。
问题: 我们有一个 SQL 作业(在作业代理中),它使用 INSERT 查询将数据插入到表中。我希望这些日志不会出现在我们的 .sqlaudit 文件中,但确实出现了。甚至 INSERT 也不属于我们的数据库审计规范中的操作。我想知道它是否被触发做另一个动作?我列出了我包含的所有操作,但据我了解,它们都不会触发服务器在 .sqlaudit 文件中写入 INSERT 日志。可能是什么问题?
注意:我还使用查询工具执行了一个 INSERT 查询,它仍然会记录它。
添加到数据库审计规范的审计操作类型:
这是它在 .sqlaudit 文件中记录的语句:
INSERT [dbo].[table_name]([a],[b],[c],[d],[e],[f],[g],[h],[i],[j],[k],[l]) VALUES(@Param000004,@Param000005,@Param000006,@Param000007,@Param000008,@Param000009,@Param000010,@Param000011,@Param000012,@Param000013,@Param000014,@Param000015)
我们正在寻找具有可用过滤功能的最佳 sql 登录审计解决方案。
到目前为止,我们已经研究了服务器审计和分析器,但得出的结论是扩展事件看起来最有希望,除非有人可以向我们展示其他方式。
问题是,有什么好的方法可以过滤不必要的登录事件吗?例如,当我使用 SSMS 连接时,会立即添加大约 10 个登录事件,如果我将 SSMS 连接到实例,则会继续堆积。这是为什么?
这是我们当前的实现:
USE master;
GO
-- Create the Event Session
IF EXISTS
(
SELECT
*
FROM sys.server_event_sessions
WHERE name = 'ServerLoginAudit'
)
DROP EVENT SESSION ServerLoginAudit ON SERVER;
GO
EXECUTE xp_create_subdir 'D:\audits\Sessions';
GO
CREATE EVENT SESSION ServerLoginAudit
ON SERVER
ADD EVENT sqlserver.login
(SET
collect_database_name = (1)
, collect_options_text = (1)
ACTION
(
sqlserver.sql_text
, sqlserver.nt_username
, sqlserver.server_principal_name
, sqlserver.client_hostname
, package0.collect_system_time
, package0.event_sequence
, sqlserver.database_id
, sqlserver.database_name
, sqlserver.username
, sqlserver.session_nt_username
, sqlserver.client_app_name
, sqlserver.session_id
, sqlserver.context_info
, sqlserver.client_connection_id
)
)
ADD TARGET package0.event_file
(SET filename = N'D:\audits\Sessions\ServerLoginAudit.xel', max_file_size = (20), max_rollover_files = (2))
WITH
(
STARTUP_STATE = OFF
, TRACK_CAUSALITY = ON
);
/* start the session */
ALTER EVENT SESSION ServerLoginAudit ON SERVER STATE = START;
GO
我目前正在为处理产品的小型微服务设计数据库模式。
该服务包含一个简单的 REST API,允许用户执行产品的基本管理,另一个 API 用于执行使用这些产品的操作。每个产品的最大消耗量受到明确定义的消耗品数量的限制。当达到此限制时,该产品将无法再食用。每个产品通常包含大约 1,000 - 1,000,000 个耗材,而单个操作一次可能需要 1 - 10 个耗材。
管理操作的频率很低,但消费操作的频率很高。
目前,该模式将所有产品信息放入一个表中。该表还包含必须在每个 INSERT、UPDATE 和 DELETE 操作上审计到基于快照的历史表中的信息。目前这是通过数据库触发器完成的,它知道如何将行与其他审计信息一起添加到历史表中。每个消耗品使用还会在消耗品表中添加一个新行,其中包含一些与消耗方式相关的附加信息。
这是一个关于这些表当前如何组织的简化示例。
------------------------
| product |
------------------------
| + id |
| + name |
| + is_enabled |
| + consumable_limit |
| + consumable_counter |
| ...10 omitted fields |
------------------------
------------------------
| product_history |
------------------------
| + id |
| + product_id |
| + time |
| + user_id |
| + history_type |
| + name |
| + is_enabled |
| + consumable_limit |
| + consumable_counter |
| ...10 omitted fields |
------------------------
------------------------
| operations |
------------------------
| + id |
| + product_id |
| + consumable_idx |
| ...10 omitted fields |
------------------------
在上图中,我省略了一些字段以使事情更简单。让我想知道的是,产品表中的 consumable_counter 会随着消费操作快速更新,这可能会进一步淹没 product_history 表。每次更新 consumable_counter 时,将 consumable 计数器移动到另一个表中不会触发产品表行的完整快照会更好吗?不知何故,我觉得它可能是理想的,因为 consumable_counter 是产品表中唯一以高速率更新的列。每个计数器增量的完整快照不知何故感觉有点矫枉过正。
编辑
consumable_counter充当相应产品已使用次数的计数器。当达到consumable_limit时,产品将无法再被消耗。
编辑
每次消费产品时,都会在操作表中添加一个新条目。此表中的条目还充当包含将在操作执行流程期间管理的状态的业务逻辑事务。
我目前正在为处理产品的小型微服务设计数据库模式。
该服务包含一个简单的 REST API,它允许用户执行产品的基本管理以及一些端点来查询有关产品的完整审计历史记录。Schema 已经包含一个基于快照的产品审计表,以支持存储每个产品的完整审计跟踪。
除了具有单独的审计历史端点之外,每个产品特定的 REST API 响应还必须包括 createdAt、createdBy、updatedAt、updatedBy 字段。我在这里想知道的是我应该将这些字段添加到产品表中还是直接从产品审计表中查询这些字段的信息更好?不知何故,当可以从审计表中查询相同的数据(甚至更多)时,我觉得将这些字段添加到产品表中似乎有点矫枉过正。
编辑
对产品表的每个 CREATE、UPDATE 和 DELETE 操作也会将一个新条目附加到审计表中。此审计表包含与实际产品表相同的列,以及用于审计事件的时间戳、用户 ID 和类型(ADD、MOD、DEL)的附加列。管理操作的频率非常低。
我想在我的 Firebird 2.5.9.27139 (x64) 数据库 (Windows 10) 上启用系统审核,以检查对其执行的所有查询。
我已经阅读了一些关于配置文件应该是什么样子的文档,但很可能我在设置所有路径和条目时遇到了一些小问题。
如果有人可以查看我的设置并指出我应该更改的内容,我将不胜感激。
我的数据库位于:C:\KSBAZA\KS-APW\WAPTEKA.FDB
我想将所有日志和跟踪配置文件存储在目录中:C:\DB_trace
在主 Firebird 目录中,我取消注释并将firebird.conf文件的行设置为:
AuditTraceConfigFile = C:\DB_trace\apw_trace.conf
C:\DB_trace\apw_trace.conf的内容:
<database WAPTEKA.FDB>
enable true
log_filename C:\DB_trace\audit_trace_database.log
max_log_size 0
include_filter %(INSERT|UPDATE|DELETE)%
log_connection true
connection_id 0
log_transaction true
log_statement_prepare true
log_statement_free true
log_statement_start true
log_statement_finish true
log_procedure_start true
log_procedure_finish true
log_trigger_start true
log_trigger_finish true
log_errors true
log_warnings true
log_initfini true
log_sweep true
time_threshold 0
max_sql_length 65536
</database>
<services>
enabled true
log_filename C:\DB_trace\audit_trace_services.log
max_log_size 0
log_services true
log_errors true
log_warnings true
log_initfini true
</services>
将更改保存到firebird.conf文件后,我完全重启了机器(编辑是在 Firebird 服务关闭时执行的。)
此外,我尝试将apw_trace.conf文件放在与firebird.conf相同的目录中(现在),但没有任何结果 - 在C:\DB_traceAuditTraceConfigFile = apw_trace.conf
目录中没有创建日志文件(我应该触摸这些空*.日志文件?)。
我无法理解如何创建统一审计策略来审计对特定模式中的所有对象执行的所有 INSERT、UPDATE、DELETE 和 SELECT 语句。
目标是跟踪逆向工程任务的特定 PL/SQL 过程中涉及的表和视图。
对于我从文档中了解到的内容,唯一的选择是指定要在策略中跟踪的每个表/视图。创建审计策略语句是否有“审计架构内的所有对象”构造?
我正在尝试为 Veeam 备份服务器设置审核。
我使用了 STIG 的审计规范 - https://www.stigviewer.com/stig/ms_sql_server_2016_instance/
此时我还没有设置任何数据库审计,只是上面链接中的服务器。
审计每 4 分钟写入 1gb。每天超过100GB!
有什么办法可以缩小尺寸吗?也许从审计中删除 Select 语句?如果是这样,我该怎么做。请指出一个教程或其他东西 - 我已经搜索了好几天......
TIA