问题标签 [audit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
89187 浏览

sql - MySQL为每一行自动存储日期时间

在 MySQL 中,我厌倦了将列dt_createddt_modified(分别是创建和最后修改的日期时间戳)添加到我数据库中的所有表中。

每次我INSERTUPDATE数据库时,我都将不得不使用NOW()关键字。这就是我的坚持。

是否有任何有效的替代方法可以让 MySQL 至少自动存储插入行的数据时间并让我检索它?

0 投票
10 回答
86944 浏览

sql-server - 在 SQL Server 中创建审核触发器

我需要在我的 SQL Server 2005 数据库中的两个表上实现更改跟踪。我需要审核添加、删除、更新(包含更新内容的详细信息)。我正计划使用 atrigger来执行此操作,但似乎很容易错误地执行此操作。

任何人都可以发布一个更新触发器的示例,以优雅的方式成功地完成此操作吗?我希望最终得到一个具有以下结构的审计表:

  • ID
  • 日志日期
  • 表名
  • TransactionType(更新/插入/删除)
  • 记录ID
  • 字段名
  • 旧值
  • 新价值

……想法?

0 投票
1 回答
1655 浏览

data-access-layer - 在数据访问层获取当前用户名的最佳实践是什么?

我们最近在我们的数据库中添加了审计。一位同事使用触发器实现了它,并要求我在登录网站时调用存储过程。存储过程将当前用户名和当前 oracle 会话 ID 插入表中,以便触发器可以将会话 ID 映射到用户名。问题是(或曾经是)他假设用户的互联网会话映射到数据库会话。事实并非如此,我们使用连接池,因此 oracle 会话 ID 可以映射到许多用户,不一定是登录该会话的用户。所以我在我的数据访问层创建了一个实用方法,在每次插入、更新和删除时调用他的过程(确保它在同一个事务中):

这有效,审计现在按要求工作。但是,我不喜欢对 HttpContext 的调用:

这是实现任务的最快方式,但我认为它不应该在数据访问层中。如果在未来某个未知时间我想使用表单应用程序访问数据库怎么办?访问 HttpContext 时会出错吗?有没有更好的方法来获取正确区分关注点的用户名?将用户名作为参数传递给每个插入、更新和删除是一种选择,但这将是一项漫长的任务,我想知道是否有更优雅的方法来做这件事。

0 投票
5 回答
14826 浏览

powershell - 使用 Powershell 审核 Exchange 2007 邮箱完全访问权限

有时我被要求提供对特定 Exchange 2007 邮箱具有完全访问权限的用户列表。目前我正在手动执行此操作,理想情况下我希望使用 Powershell 来执行此操作。

无论如何要生成完全访问权限列表(并且代表发送权限也很有用)。

谢谢,乔尼

0 投票
2 回答
1105 浏览

.net - 在 .NET 中审核用户身份 - 什么是好的策略?

我确信这是许多开发人员以前面临的要求:业务需要审计跟踪来了解谁在他们的系统中执行操作。

不管你选择如何存储被审计的信息,这个问题的核心是如何识别当前用户。

我想编写组件,从小型域模型类到服务组件,所有这些都可以从以下任何主机应用程序安全地调用:

  • Windows 桌面应用程序。
  • 托管在 IIS 中的 ASP.NET 网站。
  • 托管在 IIS 中的 WCF 服务。
  • 托管在 Windows 服务中的 WCF 服务。

鉴于技术的范围、各种身份验证模型以及必须考虑“匿名”用户的概念,我不清楚使用何种策略来获取以集中方式调用我的组件的人的身份。

你们中的任何一个聪明人都可以提出解决这个问题的方法吗?

0 投票
6 回答
94479 浏览

database-design - 审计日志的数据库设计

每次我需要设计一个新的数据库时,我都会花很多时间思考我应该如何设置数据库模式以保留更改的审计日志。

这里已经提出了一些问题,但我不同意所有场景都有一个最佳方法:

我还偶然发现了这篇关于维护数据库更改日志的有趣文章,它试图列出每种方法的优缺点。它写得很好,信息也很有趣,但它让我的决定更加困难。

我的问题是:有没有我可以使用的参考资料,可能是一本书或类似决策树的东西,我可以参考这些参考资料,根据一些输入变量决定我应该走哪条路,比如:

  • 数据库模式的成熟度
  • 如何查询日志
  • 需要重新创建记录的概率
  • 更重要的是:写入或读取性能
  • 正在记录的值的性质(字符串、数字、blob)
  • 可用存储空间

我知道的方法是:

1.添加创建和修改日期和用户的列

表格示例:

  • ID
  • 值_1
  • 价值_2
  • 值_3
  • 创建日期
  • 修改日期
  • 由...制作
  • 修改者

主要缺点:我们丢失了修改的历史。提交后无法回滚。

2. 只插入表格

表格示例

  • ID
  • 值_1
  • 价值_2
  • 值_3
  • 已删除(布尔值)
  • 用户

主要缺点:如何使外键保持最新?需要巨大的空间

3.为每个表创建一个单独的历史表

历史表示例:

  • ID
  • 值_1
  • 价值_2
  • 值_3
  • value_4
  • 用户
  • 已删除(布尔值)
  • 时间戳

主要缺点:需要复制所有已审计的表。如果架构发生更改,则也需要迁移所有日志。

4.为所有表创建一个合并历史表

历史表示例:

  • 表名
  • 场地
  • 用户
  • 新值
  • 已删除(布尔值)
  • 时间戳

主要缺点:如果需要,我能否轻松地重新创建记录(回滚)?new_value 列需要是一个巨大的字符串,以便它可以支持所有不同的列类型。

0 投票
1 回答
107 浏览

tsql - 尝试使用半成品系统审核删除

我的 ERP 系统有一个半生不熟的删除跟踪系统,它将以下信息插入一个名为 M2MDeleteLog 的表中。为简单起见,我省略了诸如 RecordId 之类的不必要的列。

不幸的是,大部分相关信息都在 1 个文本字段中。第一步是从 LogInfo 字段中提取用户 (D.STEIN)、屏幕 (SOMAST) 和屏幕 (frmso)。那部分相对容易。

我想要做的是创建一个计划作业,它每 15 分钟左右运行一次,以查找可疑活动。我将可疑活动定义为每个用户每隔 15 分钟删除 3 次。

可是等等!还有更多!

在我提供的数据中,只有 3 个删除事件,每个间隔不到一分钟。我将定义一个新的删除事件至少在最后一个删除事件之后 20 秒。

如何评估 LogDate,回溯 15 分钟,计算每个用户的删除事件,以便在为某个用户记录超过 3 个时通知管理员?

0 投票
3 回答
778 浏览

c# - 安全软件许可使用审计日志

伙计们,

我们有一个有趣的技术挑战。如何编写一个安全的审计文件来跟踪软件的使用情况,以便可以根据使用情况收取许可费用,从而使那些使用较少的人更能负担得起。

具体来说,TickZoom 为对冲基金销售 alpha 代交易平台,目前许可费用为每月 2,000 美元,包括支持(很快将增加一倍以上)。这对机构来说很好,但对个人来说太贵了。个人经常要求较低的价格以换取使用该软件所获得利润的 %,直到他们能够支付固定费用为止。

我们喜欢这个提议。但是我们需要一种可靠的方法来审计平台上实际产生的利润,并防止用户通过删除或覆盖审计文件来“玩弄”它,从而报告低于实际的收益。

此应用程序是用 C# 编写的,并且系统的这一部分被混淆了,至少使破译代码变得困难。

另一个要求是为发生的每笔交易写入文件,以便在用户觉得总费用存在一些差异的情况下进行更深入的审计。这样,个人交易利润可以与经纪人报表进行比较。

当然,假设文件将被加密。

但是关于如何使其“防篡改”的任何想法?特别是针对简单的删除尝试?

我的第一个猜测是让软件总是需要一个预先存在的审计文件,否则它将拒绝运行。

然后,当我们交付软件时,它会与一个“空”审计文件打包在一起,但实际上,它具有某种防篡改验证。

用户可能尝试“篡改”文件的下一个明显技术是让某人简单地备份那个原始的“空”文件,然后稍后用它来覆盖审计文件,从而欺骗系统以为这是一个新的开始。

也许这可以通过包含某种“最后更新时间戳”和到期时间来解决。

此外,欢迎完全不同的解决方案想法。在这种情况下,我们可能会被迫添加“电话回家”功能,以便将交易记录到我们的中央服务器。但这似乎是不利的,并且可能会在关键任务应用程序中增加另一个故障点。一般来说,他们非常不喜欢“电话回家”功能,原因很明显。

真诚的,韦尼克

0 投票
2 回答
1417 浏览

sql-server - Linq to SQL 审计跟踪/审计日志:我应该使用触发器还是 doddleaudit?

我正在开发一个需要审核所有数据库事务的业务应用程序(主要出于法律目的)。

我浏览了网络并发现了 DoddleAudit ( http://www.codeplex.com/DoddleAudit ),它基本上增加了 Linq to SQL 跟踪更改的能力。就像人们在 Hibernate 中使用拦截器一样。

我关心的是可靠性问题。虽然 ORM 层上的审计日志可能会记录通过代码发生的所有事情,但如果有人手动对数据库或黑客等发出 SQL 语句,它不会记录任何更改。基本上我正在处理的信息是有点敏感。这就是让我相信触发器可能是最可靠的方法的原因。(?)

其他记录方式是通过代码或通过存储过程,这似乎有点笨拙和不可靠。所以我基本上只能使用触发器或 DoddleAudit 之类的东西。

我希望在选择之前得到一些意见。

0 投票
3 回答
6693 浏览

asp.net - ASP.NET - 记录审计跟踪的用户会话开始/结束时间 - Global.ASAX?

我的 ASP.NET 内网 Web 应用程序使用 Windows 身份验证,我想记录以下详细信息:

1) Windows ID
2) 会话开始时间
3) 会话停止时间
4) 浏览到的 URL(可选)

我在 Global.ASAX 的“Session_Start”方法中有一些基本的代码设置来记录会话开始时间(见下文),但到目前为止就是这样。我觉得这是一种原始方法,并且有“更好”的方法可以做到这一点。所以我真的有两个问题:

1)这是做这件事的正确方法吗?如果不是,还有哪些其他选择?

2)如果这是正确的方法,我是否只需要在“Session_End”方法中删除一些代码来记录他们退出的时间,这就是一个完整的解决方案?当他们关闭打开网站的浏览器选项卡时,是否总是调用此方法,或者他们是否必须关闭整个浏览器(我没有注销功能)?用户可以通过任何方式跳过此会话结束方法(或针对这种情况开始)?