diff --git a/lambda/check-view-secutiry-option/check-view-option/exceptions.py b/lambda/check-view-secutiry-option/check-view-option/exceptions.py index fc00a279..90cd6efb 100644 --- a/lambda/check-view-secutiry-option/check-view-option/exceptions.py +++ b/lambda/check-view-secutiry-option/check-view-option/exceptions.py @@ -22,3 +22,8 @@ class ParameterNotFoundException(MeDaCaException): class DatabaseConnectionException(MeDaCaException): """データベース接続に失敗した場合の例外""" pass + + +class QueryExecutionException(MeDaCaException): + """クエリ実行に失敗した場合の例外""" + pass diff --git a/lambda/check-view-secutiry-option/check-view-option/main.py b/lambda/check-view-secutiry-option/check-view-option/main.py index 81586cc3..f626b0b8 100644 --- a/lambda/check-view-secutiry-option/check-view-option/main.py +++ b/lambda/check-view-secutiry-option/check-view-option/main.py @@ -16,7 +16,8 @@ from constants import (CHECK_TARGET_SCHEMAS, from database import Database from dto.view_secutiry_option import ViewSecurityOption from exceptions import (DatabaseConnectionException, FileNotFoundException, - MeDaCaException, ParameterNotFoundException) + MeDaCaException, ParameterNotFoundException, + QueryExecutionException) from medaca_logger import MeDaCaLogger logger = MeDaCaLogger.get_logger() @@ -35,7 +36,7 @@ def handler(event, context): connection = connection_database(db_host, db_user_name, db_user_password) logger.info('I-03-01', 'データベースへの接続開始 終了') logger.info('I-04-01', 'Viewセキュリティオプション チェック開始') - check_result = check_view_security_option(connection, check_target_schemas) + check_result = fetch_view_security_options(connection, check_target_schemas) if len(check_result) == 0: logger.info('I-04-02', 'Viewセキュリティオプション 未設定のViewはありません。処理を終了します。') @@ -61,7 +62,7 @@ def read_check_target_schemas() -> list: """設定ファイル[チェック対象スキーマ名ファイル]を読み込む Raises: - exceptions.FileNotFoundException: ファイルが読み込めなかったエラー + FileNotFoundException: ファイルが読み込めなかったエラー Exception: 想定外のエラー Returns: @@ -82,7 +83,7 @@ def read_db_param_from_parameter_store() -> tuple: """パラメータストアからDB接続情報を取得する Raises: - FileNotFoundException: _description_ + ParameterNotFoundException: 指定されたパラメータが存在しないエラー Exception: 想定外のエラー Returns: @@ -102,6 +103,19 @@ def read_db_param_from_parameter_store() -> tuple: def connection_database(host: str, user_name: str, password: str) -> Database: + """データベース接続 + + Args: + host (str): DBホスト + user_name (str): DBユーザー名 + password (str): DBパスワード + + Raises: + DatabaseConnectionException: データベースへの接続に失敗したエラー + + Returns: + Database: データベース操作クラス + """ try: database = Database(host, user_name, password) database.connect() @@ -110,7 +124,20 @@ def connection_database(host: str, user_name: str, password: str) -> Database: raise DatabaseConnectionException('E-03-02', f'データベースへの接続に失敗しました エラー内容:{e}') -def check_view_security_option(connection: Database, check_target_schemas: list) -> list: +def fetch_view_security_options(connection: Database, check_target_schemas: list) -> tuple: + """SECURITY INVOKERのついていないViewの一覧を取得する + + Args: + connection (Database): 接続済みDB操作クラス + check_target_schemas (str): チェック対象のスキーマ一覧 + + Raises: + QueryExecutionException: クエリ実行エラー + + Returns: + tuple: クエリ実行結果 + """ + select_view_security_option_sql = f""" SELECT TABLE_SCHEMA, @@ -123,13 +150,12 @@ def check_view_security_option(connection: Database, check_target_schemas: list) ) AND SECURITY_TYPE <> '{INFORMATION_SCHEMA_SECURITY_TYPE_INVOKER}' """ - print(select_view_security_option_sql) try: with connection.query(select_view_security_option_sql) as cursor: result = cursor.fetchall() return result except Exception as e: - raise DatabaseConnectionException('E-03-02', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') + raise QueryExecutionException('E-03-02', f'Viewセキュリティオプションチェックに失敗しました エラー内容:{e}') def make_notice_mail(view_security_options: list[ViewSecurityOption]): @@ -149,6 +175,19 @@ def make_notice_mail(view_security_options: list[ViewSecurityOption]): def read_mail_title(config_bucket: ConfigBucket): + """メールタイトルを読み込む + + Args: + config_bucket (ConfigBucket): 設定ファイル保管バケット操作クラス + + Raises: + FileNotFoundException: ファイルが読み込めなかったエラー + Exception: 想定外のエラー + + Returns: + str: メールタイトル + """ + try: mail_title = config_bucket.notice_mail_title_template except botocore.exceptions.ClientError as e: @@ -161,6 +200,18 @@ def read_mail_title(config_bucket: ConfigBucket): def read_mail_body_template(config_bucket: ConfigBucket): + """メール本文を読み込む + + Args: + config_bucket (ConfigBucket): 設定ファイル保管バケット操作クラス + + Raises: + FileNotFoundException: ファイルが読み込めなかったエラー + Exception: 想定外のエラー + + Returns: + str: メール本文 + """ try: mail_body_template = config_bucket.notice_mail_body_template except botocore.exceptions.ClientError as e: