将当前用户带到数据库层

时间:2009-05-11 19:57:17

标签: database logging

我有一个使用MySQL和Tomcat构建的经典3层Web应用程序。

我想在creator_id列保存所有表的每个数据库记录的创建者ID,或者只是将其记录在某处。 当前用户存储在http会话对象中。 修改所有查询并传递creator id参数是不可接受的。

我可以使用触发器,alter table命令等解决问题吗? 最好的方法是什么?

PS。黑客是可以接受和欢迎的。

2 个答案:

答案 0 :(得分:2)

数据库无法知道哪个站点用户正在发送查询,它只知道哪个数据库用户。如果它是一个Web应用程序,无论谁登录网站,它都可能是同一个数据库用户。

简短的回答是,不,您将不得不使用“不可接受的”选项,除非您想为每个站点用户创建数据库用户,并让站点使用这些用户打开数据库连接,而不是一个“共享”用户但这可能会导致更多的问题而不是它解决的问题。

答案 1 :(得分:0)

根据您在问题中的说法,您的逻辑应用程序用户ID与数据库连接ID不同。如果是这样的话,数据库怎么可能知道您的逻辑应用程序用户ID是什么?除非你传递它,否则它无法知道谁在做什么。你说修改所有查询以传递它是不可接受的。但是,你只需要修改你想要记录这个“creator_id”值的保存。您还需要修改这些表。希望你有一个包含所有这些用户的表,你可以FK到这个表的新列。