访问策略和查询优化

访问策略会影响 Vertica Database Designer 生成的投影设计,以及优化器为查询执行创建的计划。

投影设计

Database Designer 为给定表创建投影时,将考虑适用于当前用户的访问策略。Database Designer 为表生成的投影集已针对该用户的访问权限以及具有类似访问权限的其他用户进行优化。但这些投影对于具有不同访问权限的用户可能不太理想。这些差异可能会对 Vertica 如何高效处理第二组用户的查询有一些影响。当您评估表的投影设计时,请选择一种为所有授权用户优化访问的设计。

查询重写

Vertica 优化器通过在其查询计划中重写用户查询来强制执行访问策略,这会影响查询性能。例如,clients 表具有行和列访问策略,均已启用。当用户查询此表时,查询优化器会生成一个用来重写查询的计划,因此它包含两个策略:

=> SELECT * FROM clients;

查询优化器生成一个查询计划,该计划按如下方式重写查询:

SELECT * FROM (
SELECT custID, password, CASE WHEN enabled_role('manager') THEN SSN ELSE substr(SSN, 8, 4) END AS SSN FROM clients
WHERE enabled_role('broker') AND
  clients.clientID IN (SELECT brokers.clientID FROM brokers WHERE broker_name = CURRENT_USER())
) clients;