Changeset: d90418a227a6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d90418a227a6
Modified Files:
sql/scripts/80_statistics.sql
sql/server/rel_psm.c
Branch: analyze-fix
Log Message:
Fixing privileges on the analyze call. At the moment anyone can call any
function, then later checked the permission on individual tables and columns
diffs (53 lines):
diff --git a/sql/scripts/80_statistics.sql b/sql/scripts/80_statistics.sql
--- a/sql/scripts/80_statistics.sql
+++ b/sql/scripts/80_statistics.sql
@@ -8,17 +8,21 @@
-- This script gives the database administrator insight in the actual
-- value distribution over all tables in the database.
-create procedure sys.analyze()
-external name sql.analyze;
+create procedure sys."analyze"()
+external name sql."analyze";
+grant execute on procedure sys."analyze"() to public;
-create procedure sys.analyze("schema" varchar(1024))
-external name sql.analyze;
+create procedure sys."analyze"("sname" varchar(1024))
+external name sql."analyze";
+grant execute on procedure sys."analyze"(varchar(1024)) to public;
-create procedure sys.analyze("schema" varchar(1024), "tname" varchar(1024))
-external name sql.analyze;
+create procedure sys."analyze"("sname" varchar(1024), "tname" varchar(1024))
+external name sql."analyze";
+grant execute on procedure sys."analyze"(varchar(1024),varchar(1024)) to
public;
-create procedure sys.analyze("schema" varchar(1024), "tname" varchar(1024),
"cname" varchar(1024))
-external name sql.analyze;
+create procedure sys."analyze"("sname" varchar(1024), "tname" varchar(1024),
"cname" varchar(1024))
+external name sql."analyze";
+grant execute on procedure
sys."analyze"(varchar(1024),varchar(1024),varchar(1024)) to public;
create function sys."statistics"()
returns table (
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -1440,12 +1440,16 @@ psm_analyze(sql_query *query, dlist *qna
if (!columns) {
if (!(f = sql_bind_func_(sql, "sys", "analyze", tl, F_PROC)))
return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000)
"Analyze procedure missing");
+ if (!execute_priv(sql, f->func))
+ return sql_error(sql, 02, SQLSTATE(42000) "No privilege
to call analyze procedure");
list_append(analyze_calls, exp_op(sql->sa, exps, f));
} else {
if (!sname || !tname)
return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000)
"Analyze schema or table name missing");
if (!(f = sql_bind_func_(sql, "sys", "analyze", tl, F_PROC)))
return sql_error(sql, ERR_NOTFOUND, SQLSTATE(42000)
"Analyze procedure missing");
+ if (!execute_priv(sql, f->func))
+ return sql_error(sql, 02, SQLSTATE(42000) "No privilege
to call analyze procedure");
for(dnode *n = columns->h; n; n = n->next) {
const char *cname = n->data.sval;
list *nexps = list_dup(exps, NULL);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list