我正在使用SQLAlchemy附带的版本控制代码示例的修改版本来记录用户ID和更改日期.但是,我还想修改它,因此通过标记is_deleted类型标志而不是运行实际的SQL 来完成删除DELETE.我的问题是我不知道如何捕获删除并用更新替换它.
这是我到目前为止所拥有的:
''' http://docs.sqlalchemy.org/en/rel_0_8/orm/examples.html?highlight=versioning#versioned-objects '''
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.orm import mapper, class_mapper, attributes, object_mapper, scoping
from sqlalchemy.orm.session import Session
from sqlalchemy.orm.exc import UnmappedClassError, UnmappedColumnError
from sqlalchemy import Table, Column, ForeignKeyConstraint, DateTime, String, Boolean
from sqlalchemy import event
from sqlalchemy.orm.properties import RelationshipProperty
from datetime import datetime
from sqlalchemy.schema import ForeignKey
from sqlalchemy.sql.expression import false
def col_references_table(col, table):
for fk in col.foreign_keys:
if fk.references(table):
return True
return False
def _history_mapper(local_mapper):
cls = local_mapper.class_
# set …Run Code Online (Sandbox Code Playgroud) 我调试了如何将审计添加到系统中以便成功登录,并发现使用aop调用了CustomAuditEventRepository.auditEventRepository().add(AuditEvent事件).是否有任何文档如何为任何自定义操作添加审核?
我正在寻找通用方法来审核我为某些 API 编写的快速中间件。
我想出了几种方法,但对我来说似乎没有那么有效。现在我只想登录到控制台或日志文件,但稍后我将查看数据存储。
使用诸如代码段中给出的中央函数来进行日志记录。这是记录 API 请求/响应的好方法,但在审核关键信息(例如审核用户注册中的用户 ID)时无济于事。或者在用户登录时审核电子邮件地址。
function auditUserAction(apiFunction) {
function jsonWrapper(funcToWrap, userAction) {
return function() {
userAction.jsonResponse = arguments[0];
return funcToWrap.apply(this, arguments);
}
}
return function() {
req = arguments[0];
res = arguments[1];
// Overriding json method so we can capture the json response
res.json = jsonWrapper(res.json, userAction);
userAction.url = req.url;
userAction.userId = req.headers.user_id;
userAction.referer = req.headers.referer;
userAction.browserAgent = req.headers['user-agent'];
result = apiFunction.apply(this, arguments);
userAction.responseStatusCode = res.statusCode;
userAction.responseBody = res.body;
logger.info("Action", userAction);
return result; …Run Code Online (Sandbox Code Playgroud)我在我的 symfony 应用程序中将 Data-Dog/Auditbundle用于 AuditLogs。此外,我还使用 TokenAuthenticator 作为 api 的守卫。但是 bundle 的 EventSubscriber 在 TokenAuthenticator 之前被调用,因此
public function __construct(TokenStorageInterface $securityTokenStorage)
{
$this->securityTokenStorage = $securityTokenStorage;
}
Run Code Online (Sandbox Code Playgroud)
EventSubscriber 中的 this 将令牌设为 null,我无法获取用户。
我正在开发一个具有主应用程序和管理员应用程序的Padrino应用程序.当用户登录会话时,我只需运行以下两行来登录.
account = Account.authenticate(params[:email], params[:password])
set_current_account(account)
Run Code Online (Sandbox Code Playgroud)
在Admin中的任何控制器中使用调试器
current_account
#<Account @id=1 @name="John" @surname="Davies" @email="john.davies@gmail.com" @crypted_password="3456789" @role="admin">
Run Code Online (Sandbox Code Playgroud)
在任何型号的调试器
current_account
*** NameError Exception: undefined local variable or method `current_account' for #<Post @id=1 @question="Why is this not working?" @answer="I have no idea">
Run Code Online (Sandbox Code Playgroud)
我能够访问current_account以找出在Admin应用程序中登录的用户,但是在主应用程序中无法访问此变量.
我想要做的是我为所有模型创建一个活动源或审计跟踪,因此当在任何模型中创建/更新/销毁记录时,会在模型活动中创建一条新记录.话虽这么说,我需要访问模型中的current_account变量.
我搜索了解决方案,并提出了一个建议:
在admin/app.rb中
enable :sessions
set :session_id, "my-global-session"
Run Code Online (Sandbox Code Playgroud)
在app/app.rb中
register Padrino::Admin::AccessControl
register Padrino::Admin::Helpers
enable :sessions
set :session_id, "my-global-session"
Run Code Online (Sandbox Code Playgroud)
它对我不起作用.有没有办法在我的模型中访问current_account?
感谢您的任何指导或建议.
每当更新/删除实体时,NHibernate Envers 都能很好地创建审核日志。基本上,它为每个可审计实体创建一个审计表,并将数据快照写入审计表中。例如,如果客户记录保存在 CUSTOMER 表中,则客户记录的审核日志将保存在 CUSTOMER_AUD 表中。
在我的一个项目中,我们使用实体框架 6.1。我搜索并查看了各种替代方案,例如AuditDBContext和EntityFramework Extensions,但它们都没有提供类似于 NHibernate Envers 的开箱即用解决方案。
我认为生成审核日志应该是一个非常常见的要求,所以我的问题是,对于 EF 6+ 是否有任何开箱即用的解决方案可以生成类似于 NHibernate Envers 的审核日志?
我正在使用Serilog和MSSqlServer接收器.即使我按照Serilog.Sinks.MSSqlServer中提到的所有步骤仍然无法在SQL表中记录任何消息.如果您能告诉我哪些部分错过或配置错误,我真的很感激?
以下是我项目中配置代码的部分:
public ILogger Logger = null;
private ColumnOptions _columnOptions = new ColumnOptions
{
AdditionalDataColumns = new Collection<DataColumn>
{
new DataColumn() { AllowDBNull = true, ColumnName = "CreatedBy",DataType = typeof (Guid) },
new DataColumn() { AllowDBNull = true, ColumnName = "CreatedDate",DataType = typeof (DateTime)},
new DataColumn() { AllowDBNull = true, ColumnName = "StatusID",DataType = typeof (byte)},
new DataColumn() { AllowDBNull = true, ColumnName = "ModifiedBy",DataType = typeof (Guid) },
new DataColumn() { AllowDBNull = true, ColumnName = "ModifiedDate",DataType …Run Code Online (Sandbox Code Playgroud) 最近我有一个问题使Log4Net工作(在这里描述)但在那之后它没关系.
我已经离开了这一段时间,因为我需要开发一些模块,我让日志记录稍微落后了.现在,我看,我甚至尝试更改日志文件的名称和位置(静态设置),它创建它,但在两种情况下都没有写任何东西.
这是我的log4Net配置文件:
<?xml version="1.0"?>
<configuration>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="ApplicationLogging.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是我的Global.asax
[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
XmlConfigurator.Configure();
ILog logger …Run Code Online (Sandbox Code Playgroud) c# log4net log4net-configuration audit-logging entity-framework-6
如何将实体的更改记录到日志文件中?考虑我有Person这样的。
import org.hibernate.envers.Audited;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Column;
@Entity
@Audited
public class Person {
@Id
@GeneratedValue
private int id;
private String name;
private String surname;
// add getters, setters, constructors, equals and hashCode here
}
Run Code Online (Sandbox Code Playgroud)
和改变现有的代码 Person
Person p1 = new Person("name-1", "surname-1");
personRepository.save(p1);
Person p2 = personRepository.findOne(1L);
p2.setName("new-name");
personRepository.save(p2);
Run Code Online (Sandbox Code Playgroud)
我怎么会有
在我的日志文件中?我知道envars可以在 db 中存储更改并让我稍后提取它们,AuditReader但我喜欢将更改存储在 Json 文件中以将它们发送到第三方应用程序(如 Elastic)。
我正在尝试为 docker 守护进程配置审核,如下所示:
将以下行添加到/etc/audit/audit.rules文件中:
-w /usr/bin/dockerd -k docker
Run Code Online (Sandbox Code Playgroud)
然后,使用以下命令重新启动审核守护程序:
service auditd restart
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
Failed to restart auditd.service: Operation refused, unit auditd.service may be requested by dependency only.
Run Code Online (Sandbox Code Playgroud)
使用systemctl也不起作用。有解决方法或解决办法吗?
audit-logging ×10
c# ×2
audit ×1
database ×1
docker ×1
express ×1
hibernate ×1
java ×1
jhipster ×1
log4net ×1
middleware ×1
node.js ×1
orm ×1
padrino ×1
php ×1
python ×1
ruby ×1
serilog ×1
spring ×1
spring-data ×1
sql-server ×1
sqlalchemy ×1
symfony ×1