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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions