Changeset: edcbe78347e7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=edcbe78347e7
Modified Files:
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: Nov2019
Log Message:

When a database table/column/schema gets deleteed, remove the granted 
privileges on it


diffs (64 lines):

diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -472,5 +472,6 @@ extern sql_trigger *sql_trans_copy_trigg
 extern sql_part *sql_trans_copy_part(sql_trans *tr, sql_table *t, sql_part 
*pt);
 
 extern void sql_trans_drop_any_comment(sql_trans *tr, sqlid id);
+extern void sql_trans_drop_obj_priv(sql_trans *tr, sqlid obj_id);
 
 #endif /*SQL_STORAGE_H */
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4694,6 +4694,7 @@ sys_drop_column(sql_trans *tr, sql_colum
        table_funcs.table_delete(tr, syscolumn, rid);
        sql_trans_drop_dependencies(tr, col->base.id);
        sql_trans_drop_any_comment(tr, col->base.id);
+       sql_trans_drop_obj_priv(tr, col->base.id);
 
        if (col->def && (seq_pos = strstr(col->def, next_value_for))) {
                sql_sequence * seq = NULL;
@@ -4810,6 +4811,7 @@ sys_drop_table(sql_trans *tr, sql_table 
 
        sql_trans_drop_any_comment(tr, t->base.id);
        sql_trans_drop_dependencies(tr, t->base.id);
+       sql_trans_drop_obj_priv(tr, t->base.id);
 
        if (isKindOfTable(t) || isView(t))
                if (sys_drop_columns(tr, t, drop_action))
@@ -4867,6 +4869,7 @@ sys_drop_func(sql_trans *tr, sql_func *f
 
        sql_trans_drop_dependencies(tr, func->base.id);
        sql_trans_drop_any_comment(tr, func->base.id);
+       sql_trans_drop_obj_priv(tr, func->base.id);
 
        tr->schema_updates ++;
 
@@ -5237,6 +5240,7 @@ sql_trans_drop_schema(sql_trans *tr, sql
        sys_drop_types(tr, s, drop_action);
        sys_drop_sequences(tr, s, drop_action);
        sql_trans_drop_any_comment(tr, s->base.id);
+       sql_trans_drop_obj_priv(tr, s->base.id);
 
        s->base.wtime = tr->wtime = tr->wstime;
        tr->schema_updates ++;
@@ -6934,3 +6938,18 @@ sql_trans_drop_any_comment(sql_trans *tr
                table_funcs.table_delete(tr, comments, row);
        }
 }
+
+void
+sql_trans_drop_obj_priv(sql_trans *tr, sqlid obj_id)
+{
+       sql_schema *sys = find_sql_schema(tr, "sys");
+       sql_table *privs = find_sql_table(sys, "privileges");
+
+       assert(sys && privs);
+       /* select privileges of this obj_id */
+       rids *A = table_funcs.rids_select(tr, find_sql_column(privs, "obj_id"), 
&obj_id, &obj_id, NULL);
+       /* remove them */
+       for(oid rid = table_funcs.rids_next(A); !is_oid_nil(rid); rid = 
table_funcs.rids_next(A))
+               table_funcs.table_delete(tr, privs, rid);
+       table_funcs.rids_destroy(A);
+}
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to