风险查询检测 ​

风险查询检测是一种用于记录可能造成危害的查询(无论有意或无意)的机制。当检测到风险查询时,会以日志级别记录风险查询的类别描述和查询文本。

该功能在GUC参数enable_risky_query_detection设置为ON时启用。

注意

  • 当enable_risky_query_detection设置为on时,风险查询功能仅记录用户直接提交的SQL语句,以增强透明度和可审计性。数据库机制(如触发器、函数或存储过程)生成的查询会被有意排除,确保日志清晰聚焦于用户发起的操作。

风险查询类别 ​

  • 风险查询:大规模 SELECT

      当查询的响应行数超过 1000 行时,触发此风险查询日志事件。
    
  • 风险查询:大规模 UPDATE

      当查询更新的记录数超过 1000 条时,触发此风险查询日志事件。
    
  • 风险查询:大规模 DELETE

      当查询删除的记录数超过 1000 条时,触发此风险查询日志事件。
    
  • 风险查询:无 WHERE 子句的 UPDATE

      当查询执行 UPDATE 操作且未使用 WHERE 子句时,触发此风险查询日志事件。例如:
    
    sql
    UPDATE employees SET salary = salary * 1.10;
  • 风险查询:无 WHERE 子句的 DELETE

      当查询执行 DELETE 操作且未使用 WHERE 子句时,触发此风险查询日志事件。例如:
    
    sql
    DELETE FROM employees;
  • 风险查询:模式变更(DDL)

    当查询尝试通过以下方式修改数据库结构时,触发此风险查询日志事件:

    添加表、视图、触发器、索引等元素;

    修改列重命名、触发器、函数等元素;

    删除表、视图、事件等元素。

  • 相关 SQL 命令包括:

    sql
    CREATE TABLE、CREATE TABLE AS、CREATE FOREIGN TABLE、CREATE SCHEMA、CREATE TABLESPACE、CREATE TYPE AS ENUM、CREATE FUNCTION、CREATE DATABASE、CREATE TRIGGER、CREATE SERVER、CREATE SEQUENCE、CREATE PUBLICATION、CREATE SUBSCRIPTION、CREATE FOREIGN DATA WRAPPER、ALTER TABLE、ALTER TABLESPACE SET、ALTER TYPE ADD VALUE、ALTER FUNCTION、ALTER DATABASE、ALTER DATABASE SET、ALTER DEFAULT PRIVILEGES、ALTER SET SCHEMA、ALTER SERVER、ALTER TEXT SEARCH DICTIONARY、ALTER TEXT SEARCH CONFIGURATION、ALTER SEQUENCE、ALTER PUBLICATION、ALTER SUBSCRIPTION、ALTER FOREIGN DATA WRAPPER、DROP OWNED BY、DROP TABLESPACE、DROP DATABASE、DROP、DROP SUBSCRIPTION、CREATE INDEX、CREATE VIEW、ALTER VIEW、CREATE TYPE AS COMPOSITE、ALTER RENAME TO、REINDEX、CREATE AGGREGATE、CREATE OPERATOR。
  • 风险查询:文件操作

    当查询尝试访问文件系统(具体为COPY操作)时,触发此风险查询日志事件。

  • 风险查询:TRUNCATE 操作

    当查询执行TRUNCATE命令时,触发此风险查询日志事件。

  • 风险查询:权限变更

    当查询尝试修改用户权限时,触发此风险查询日志事件。

  • 相关 SQL 命令包括:

    sql
    CREATE USER MAPPING、ALTER USER MAPPING、DROP USER MAPPING、CREATE ROLE、ALTER ROLE、ALTER ROLE SET、DROP ROLE、REASSIGN OWNED BY、GRANT、GRANT ROLE、GRANT DATABASE、SECURITY LABEL、ALTER OWNER、CREATE GROUP、ALTER GROUP、DROP GROUP、CREATE POLICY、ALTER POLICY、CREATE WEAK PASSWORD DICTIONARY、DROP WEAK PASSWORD DICTIONARY、TIME CAPSULE。
  • 风险查询:访问资源标签表

    当查询访问带标签的表时,触发此风险查询日志事件。例如:

    sql
    CREATE TABLE t1 (i1 INT, i2 TEXT);
    CREATE RESOURCE LABEL test_resource_label add TABLE(t1);
    SELECT * FROM t1;  -- 执行此SELECT操作时将触发风险查询日志事件