Skip to content

(refactored branch) Filters do not work correctly in the Japanese object name #48

@harada-toshi

Description

@harada-toshi

Overview

  • Filters do not work correctly in the Japanese object name.

(Below, it is written in Japanese.)

概要

  • 日本語オブジェクト名によるフィルタ機能が正しく動作しない。
  • たとえば、object_name = 'テストスキーマ.テストテーブル'といったフィルタをルールに記述して、そのテーブルにアクセスするSQL文を実行しても、監査ログに出力されない。

設定ファイル

[output]
        logger = 'serverlog'

[option]
        log_parameter = on

[rule]
        class = 'CONNECT'
        database = 'テストデータベース'

[rule]
        class = 'READ,WRITE,MISC'
        object_name = 'テストスキーマ.テストテーブル'

実行したSQL文

CREATE SCHEMA テストスキーマ;

CREATE TABLE テストスキーマ.テストテーブル ("識別子" integer, "データ" text);

PREPARE 準備文1(int, text) AS
  INSERT INTO テストスキーマ.テストテーブル VALUES ($1, $2);
EXECUTE 準備文1(1, 'あああ');

PREPARE 準備文2(int, text) AS
  SELECT * FROM テストスキーマ.テストテーブル WHERE "識別子" = $1 AND "データ" =  $2;
EXECUTE 準備文2(1, 'あああ');

PREPARE prep3(int, text) AS
  SELECT * FROM テストスキーマ.テストテーブル WHERE "識別子" = $1 AND "データ" =  $2;
EXECUTE prep3(1, 'あああ');

DROP TABLE テストスキーマ.テストテーブル;
DROP SCHEMA テストスキーマ;

SET ROLE フー;
SELECT 1;
RESET ROLE;

監査ログ

LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:49:15 JST,,,[local],[unknown],,0,00000,connection received: host=[local],,,,,
LOG:  connection received: host=[local]
LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:49:15 JST,テストデータベース,postgres,[local],[unknown],2/7,0,00000,connection authorized: user=postgres database=テストデータベース,,,,,
LOG:  connection authorized: user=postgres database=テストデータベース
LOG:  AUDIT: SESSION,1,1,MISC,2017-03-07 20:49:15 JST,テストデータベース,postgres,[local],psql,2/11,2492,,,EXECUTE,,,"EXECUTE 準備文1(1, 'あああ');",<none>
LOG:  AUDIT: SESSION,2,1,MISC,2017-03-07 20:49:15 JST,テストデータベース,postgres,[local],psql,2/13,0,,,EXECUTE,,,"EXECUTE 準備文2(1, 'あああ');",<none>
LOG:  AUDIT: SESSION,3,1,MISC,2017-03-07 20:49:15 JST,テストデータベース,postgres,[local],psql,2/15,0,,,EXECUTE,,,"EXECUTE prep3(1, 'あああ');",<none>
LOG:  AUDIT: SESSION,4,1,MISC,2017-03-07 20:49:15 JST,テストデータベース,postgres,[local],psql,2/18,0,,,SET,,,SET ROLE フー;,<none>
LOG:  AUDIT: SESSION,5,1,MISC,2017-03-07 20:49:15 JST,テストデータベース,postgres,[local],psql,2/20,0,,,RESET,,,RESET ROLE;,<none>
LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:49:15 JST,テストデータベース,postgres,[local],psql,,0,00000,disconnection: session time: 0:00:00.041 user=postgres database=テストデータベース host=[local],,,,,
LOG:  disconnection: session time: 0:00:00.041 user=postgres database=テストデータベース host=[local]
LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:49:15 JST,,,[local],[unknown],,0,00000,connection received: host=[local],,,,,
LOG:  connection received: host=[local]
LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:49:15 JST,テストデータベース,バー,[local],[unknown],2/21,0,00000,connection authorized: user=バー database=テストデータベース,,,,,
LOG:  connection authorized: user=バー database=テストデータベース
LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:49:15 JST,テストデータベース,バー,[local],psql,,0,00000,disconnection: session time: 0:00:00.004 user=バー database=テストデータベース host=[local],,,,,
LOG:  disconnection: session time: 0:00:00.004 user=バー database=テストデータベース host=[local]
LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:49:15 JST,,,[local],[unknown],,0,00000,connection received: host=[local],,,,,
LOG:  connection received: host=[local]
LOG:  connection authorized: user=postgres database=postgres
LOG:  disconnection: session time: 0:00:00.134 user=postgres database=postgres host=[local]
LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:49:16 JST,,,[local],[unknown],,0,00000,connection received: host=[local],,,,,
LOG:  connection received: host=[local]
LOG:  connection authorized: user=postgres database=postgres
LOG:  disconnection: session time: 0:00:00.007 user=postgres database=postgres host=[local]
LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:49:16 JST,,,[local],[unknown],,0,00000,connection received: host=[local],,,,,
LOG:  connection received: host=[local]
LOG:  connection authorized: user=postgres database=postgres
LOG:  disconnection: session time: 0:00:00.005 user=postgres database=postgres host=[local]
  • 日本語データベース名によるフィルタリングは正しく動作している。
  • object_name = 'テストスキーマ.テストテーブル'のフィルタをはずすと、監査ログは出力される。
LOG:  AUDIT: SESSION,,,CONNECT,2017-03-07 20:58:33 JST,テストデータベース,postgres,[local],[unknown],2/7,0,00000,connection authorized: user=postgres database=テストデータベース,,,,,
LOG:  connection authorized: user=postgres database=テストデータベース
LOG:  AUDIT: SESSION,1,1,WRITE,2017-03-07 20:58:33 JST,テストデータベース,postgres,[local],psql,2/10,0,,,PREPARE,,,"PREPARE 準備文1(int, text) AS
          INSERT INTO テストスキーマ.テストテーブル VALUES ($1, $2);",<none>
LOG:  AUDIT: SESSION,2,1,WRITE,2017-03-07 20:58:33 JST,テストデータベース,postgres,[local],psql,2/11,0,,,INSERT,TABLE,"""テストスキーマ"".""テストテーブル""","PREPARE 準備文1(int, text) AS
          INSERT INTO テストスキーマ.テストテーブル VALUES ($1, $2);",1 あああ
  • このときに監査ログに出力されたobject_nameを見ると、"""テストスキーマ"".""テストテーブル"""のように展開されている。

  • しかし、設定ファイルのobject_nameに二重引用符を含めようとすると、設定ファイル誤りと判断されてしまう。

  • 設定ファイル

[rule]
        class = 'READ,WRITE,MISC'
        object_name = '"テストスキーマ"."テストテーブル"'
  • 起動時のエラーログ
FATAL:  invalid format parameter ""テストスキーマ"."テストテーブル"" of field "object_name" in rule section
LOG:  database system is shut down

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions