在mysql中只设置一次变量

时间:2017-07-28 11:29:59

标签: mysql

我使用的是经典的ASP和MySQL(使用PHP不会改变问题的重点)。

我需要在我的主页上设置一个变量:

SET block_encryption_mode = 'aes-256-cbc'

我无法将其设置为全局变量,因为其他用户正在使用服务器,并且可能使用默认的block_encryption_mode

我知道我可以在每个网页的开头使用ASP / PHP语句,但这似乎使用了太多的资源;每个用户都会在每个页面上执行SET语句......

有没有办法在每个会话的开始时设置变量或执行其他一些SQL语句,就像ASP之类的启动事件一样?或者,如果不在每个页面上为每个用户执行查询,我怎样才能实现目标?

2 个答案:

答案 0 :(得分:3)

您可以使用init_connect变量。

  

服务器为每个连接的客户端执行的字符串。该字符串由一个或多个SQL语句组成,以分号字符分隔。

您还可以使用以下代码区分用户:

IF (CURRENT_USER() = 'special_crypto_dude@localhost') THEN
    SET SESSION block_encryption_mode = 'aes-256-cbc';
END IF;

答案 1 :(得分:2)

在每页上调用SET是安全的,因为它以微秒的顺序执行。在已打开的连接上几乎没有开销调用SET

除非您可以全局应用此设置,否则我不会打扰。只需在获取数据库连接句柄后直接设置block_encryption_mode(以及collationtimezone)。