From db9458c1743e26ffbfbaa30b62edd22216ba2779 Mon Sep 17 00:00:00 2001 From: unknowissue Date: Wed, 29 Dec 2021 00:23:10 +0800 Subject: [PATCH 1/4] =?UTF-8?q?oracle=E8=84=B1=E6=95=8F=E6=9B=B4=E6=8D=A2?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/engines/oracle.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/sql/engines/oracle.py b/sql/engines/oracle.py index 3e179ac4b3..fc798f0415 100644 --- a/sql/engines/oracle.py +++ b/sql/engines/oracle.py @@ -14,7 +14,8 @@ from . import EngineBase import cx_Oracle from .models import ResultSet, ReviewSet, ReviewResult -from sql.utils.data_masking import brute_mask +#from sql.utils.data_masking import brute_mask +from sql.utils.data_masking import simple_column_mask logger = logging.getLogger('default') @@ -361,12 +362,12 @@ def query(self, db_name=None, sql='', limit_num=0, close_conn=True, **kwargs): self.close() return result_set - def query_masking(self, schema_name=None, sql='', resultset=None): - """传入 sql语句, db名, 结果集, - 返回一个脱敏后的结果集""" - # 仅对select语句脱敏 - if re.match(r"^select|^with", sql, re.I): - filtered_result = brute_mask(self.instance, resultset) + + def query_masking(self, db_name=None, sql='', resultset=None): + """简单字段脱敏规则, 仅对select有效""" + if re.match(r"^select", sql, re.I): + #filtered_result = brute_mask(self.instance, resultset) + filtered_result = simple_column_mask(self.instance, resultset) filtered_result.is_masked = True else: filtered_result = resultset @@ -637,9 +638,9 @@ def execute_workflow(self, workflow, close_conn=True): rowcount = cursor.rowcount stagestatus = "Execute Successfully" if sqlitem.stmt_type == "PLSQL" and sqlitem.object_name and sqlitem.object_name != 'ANONYMOUS' and sqlitem.object_name != '': - query_obj_sql = f"""SELECT OBJECT_NAME, STATUS, TO_CHAR(LAST_DDL_TIME, 'YYYY-MM-DD HH24:MI:SS') FROM ALL_OBJECTS - WHERE OWNER = '{sqlitem.object_owner}' - AND OBJECT_NAME = '{sqlitem.object_name}' + query_obj_sql = f"""SELECT OBJECT_NAME, STATUS, TO_CHAR(LAST_DDL_TIME, 'YYYY-MM-DD HH24:MI:SS') FROM ALL_OBJECTS + WHERE OWNER = '{sqlitem.object_owner}' + AND OBJECT_NAME = '{sqlitem.object_name}' """ cursor.execute(query_obj_sql) row = cursor.fetchone() @@ -738,7 +739,7 @@ def backup(self, workflow, cursor, begin_time, end_time): endtime=>to_date('{end_time}','yyyy/mm/dd hh24:mi:ss'), options=>dbms_logmnr.dict_from_online_catalog + dbms_logmnr.continuous_mine); end;''' - undo_sql = f'''select sql_redo,sql_undo from v$logmnr_contents + undo_sql = f'''select sql_redo,sql_undo from v$logmnr_contents where SEG_OWNER not in ('SYS','SYSTEM') and session# = (select sid from v$mystat where rownum = 1) and serial# = (select serial# from v$session s where s.sid = (select sid from v$mystat where rownum = 1 )) order by scn desc''' @@ -822,7 +823,7 @@ def sqltuningadvisor(self, db_name=None, sql='', close_conn=True, **kwargs): my_sqltext := '{sql}'; my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK( sql_text => my_sqltext, - user_name => '{db_name}', + user_name => '{db_name}', scope => 'COMPREHENSIVE', time_limit => 30, task_name => '{task_name}', @@ -848,8 +849,8 @@ def sqltuningadvisor(self, db_name=None, sql='', close_conn=True, **kwargs): finally: # 结束分析任务 if task_begin == 1: - end_sql = f'''DECLARE - begin + end_sql = f'''DECLARE + begin dbms_sqltune.drop_tuning_task('{task_name}'); end;''' cursor.execute(end_sql) From b636e5777bb5eb26a323a4d7b43df47dbc3e1917 Mon Sep 17 00:00:00 2001 From: unknowissue Date: Wed, 29 Dec 2021 00:46:39 +0800 Subject: [PATCH 2/4] =?UTF-8?q?ci=E6=B5=8B=E8=AF=95Oracle=E8=AF=AD?= =?UTF-8?q?=E6=B3=95=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/engines/tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/engines/tests.py b/sql/engines/tests.py index 28b8b95f9a..893f27cd6b 100644 --- a/sql/engines/tests.py +++ b/sql/engines/tests.py @@ -1427,7 +1427,8 @@ def test_filter_sql_with_limit(self): def test_query_masking(self): query_result = ResultSet() new_engine = OracleEngine(instance=self.ins) - masking_result = new_engine.query_masking(schema_name='', sql='select 1', resultset=query_result) + #masking_result = new_engine.query_masking(schema_name='', sql='select 1', resultset=query_result) + masking_result = new_engine.query_masking(schema_name='', sql='select 1 from dual', resultset=query_result) self.assertEqual(masking_result, query_result) def test_execute_check_select_sql(self): From c9fc9990c933e2607e73ec15b09915be01ee7bdd Mon Sep 17 00:00:00 2001 From: unknowissue Date: Wed, 29 Dec 2021 09:06:35 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BA=86=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/engines/oracle.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/sql/engines/oracle.py b/sql/engines/oracle.py index fc798f0415..4c18c2832d 100644 --- a/sql/engines/oracle.py +++ b/sql/engines/oracle.py @@ -14,7 +14,6 @@ from . import EngineBase import cx_Oracle from .models import ResultSet, ReviewSet, ReviewResult -#from sql.utils.data_masking import brute_mask from sql.utils.data_masking import simple_column_mask logger = logging.getLogger('default') @@ -366,7 +365,6 @@ def query(self, db_name=None, sql='', limit_num=0, close_conn=True, **kwargs): def query_masking(self, db_name=None, sql='', resultset=None): """简单字段脱敏规则, 仅对select有效""" if re.match(r"^select", sql, re.I): - #filtered_result = brute_mask(self.instance, resultset) filtered_result = simple_column_mask(self.instance, resultset) filtered_result.is_masked = True else: From 06ba73b0ae0ac89c665e9525298e0361c3b7a171 Mon Sep 17 00:00:00 2001 From: unknowissue Date: Wed, 29 Dec 2021 09:18:41 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E6=B5=8B?= =?UTF-8?q?=E8=AF=95sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/engines/tests.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sql/engines/tests.py b/sql/engines/tests.py index 893f27cd6b..c73dcb72b0 100644 --- a/sql/engines/tests.py +++ b/sql/engines/tests.py @@ -1427,8 +1427,7 @@ def test_filter_sql_with_limit(self): def test_query_masking(self): query_result = ResultSet() new_engine = OracleEngine(instance=self.ins) - #masking_result = new_engine.query_masking(schema_name='', sql='select 1', resultset=query_result) - masking_result = new_engine.query_masking(schema_name='', sql='select 1 from dual', resultset=query_result) + masking_result = new_engine.query_masking(sql='select 1 from dual', resultset=query_result) self.assertEqual(masking_result, query_result) def test_execute_check_select_sql(self):