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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list