从 mysql 触发器获取应用程序登录用户
Get application logged in user from mysql triggers
有什么方法可以从 MySQL 触发器中识别应用程序登录用户吗?
我在这里进行 MySQL 基于触发器的审计。我需要确定哪个用户正在对数据库执行 CRUD 操作。通过使用USER()
可以获得数据库用户。但在这里我试图识别应用程序登录用户。
我尝试使用 @user
但它被赋予空值。
应用程序用户不是 MySQL 资源。任何应用程序都可以将它们作为数据存储在 MySQL table 中,但是 MySQL 无法使用它来了解哪个应用程序用户当前已通过身份验证。应用程序如何使用该数据是根据您的应用程序自定义的。
您甚至可能遇到例外情况。例如,管理员拥有临时采用另一个用户身份的特权的情况并不少见。这也取决于您的应用程序,除非您告诉它,否则 MySQL 无法知道这一点。
您可以在应用程序用户通过身份验证后,在数据库会话中 set @user='...';
实施代码。如果您始终如一地这样做,那么该变量将在触发器中可用。
但这不是很安全。任何客户端都可以将值设置为其他值。
否则数据库会话无法了解您的应用程序的任何信息。它只知道 mysql 用户。
有什么方法可以从 MySQL 触发器中识别应用程序登录用户吗?
我在这里进行 MySQL 基于触发器的审计。我需要确定哪个用户正在对数据库执行 CRUD 操作。通过使用USER()
可以获得数据库用户。但在这里我试图识别应用程序登录用户。
我尝试使用 @user
但它被赋予空值。
应用程序用户不是 MySQL 资源。任何应用程序都可以将它们作为数据存储在 MySQL table 中,但是 MySQL 无法使用它来了解哪个应用程序用户当前已通过身份验证。应用程序如何使用该数据是根据您的应用程序自定义的。
您甚至可能遇到例外情况。例如,管理员拥有临时采用另一个用户身份的特权的情况并不少见。这也取决于您的应用程序,除非您告诉它,否则 MySQL 无法知道这一点。
您可以在应用程序用户通过身份验证后,在数据库会话中 set @user='...';
实施代码。如果您始终如一地这样做,那么该变量将在触发器中可用。
但这不是很安全。任何客户端都可以将值设置为其他值。
否则数据库会话无法了解您的应用程序的任何信息。它只知道 mysql 用户。