我使用的是经典的ASP和MySQL(使用PHP不会改变问题的重点)。
我需要在我的主页上设置一个变量:
SET block_encryption_mode = 'aes-256-cbc'
我无法将其设置为全局变量,因为其他用户正在使用服务器,并且可能使用默认的block_encryption_mode
。
我知道我可以在每个网页的开头使用ASP / PHP语句,但这似乎使用了太多的资源;每个用户都会在每个页面上执行SET语句......
有没有办法在每个会话的开始时设置变量或执行其他一些SQL语句,就像ASP之类的启动事件一样?或者,如果不在每个页面上为每个用户执行查询,我怎样才能实现目标?
答案 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
(以及collation
和timezone
)。