Changeset: f7e2607edf3f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f7e2607edf3f
Modified Files:
        sql/server/sql_privileges.c
        sql/server/sql_privileges.h
Branch: Apr2019
Log Message:

Added column_privs server backend function


diffs (60 lines):

diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c
--- a/sql/server/sql_privileges.c
+++ b/sql/server/sql_privileges.c
@@ -466,6 +466,25 @@ table_privs(mvc *m, sql_table *t, int pr
 }
 
 int
+column_privs(mvc *m, sql_column *c, int priv)
+{
+       /* only SELECT and UPDATE privileges for columns are available */
+       /* temporary tables are owned by the session user, so does it's columns 
*/
+       if (c->t->persistence == SQL_DECLARED_TABLE ||
+           (!c->t->system && c->t->persistence != SQL_PERSIST) ||
+           (priv == PRIV_SELECT && (c->t->persistence != SQL_PERSIST || 
c->t->commit_action)))
+               return 1;
+       if (admin_privs(m->user_id) || admin_privs(m->role_id) ||
+           (c->t->s && (m->user_id == c->t->s->auth_id || m->role_id == 
c->t->s->auth_id)) ||
+           sql_privilege(m, m->user_id, c->base.id, priv, 0) == priv ||
+           sql_privilege(m, m->role_id, c->base.id, priv, 0) == priv ||
+           sql_privilege(m, ROLE_PUBLIC, c->base.id, priv, 0) == priv) {
+               return 1;
+       }
+       return 0;
+}
+
+int
 execute_priv(mvc *m, sql_func *f)
 {
        int priv = PRIV_EXECUTE;
@@ -827,7 +846,6 @@ sql_rename_user(mvc *sql, char *olduser,
        if (backend_rename_user(sql, olduser, newuser) == FALSE)
                throw(SQL,"sql.rename_user", SQLSTATE(M1M05) "%s", sql->errstr);
        return NULL;
-
 }
 
 int
diff --git a/sql/server/sql_privileges.h b/sql/server/sql_privileges.h
--- a/sql/server/sql_privileges.h
+++ b/sql/server/sql_privileges.h
@@ -26,7 +26,7 @@ extern int mvc_set_schema(mvc *m, char *
 extern int global_privs(mvc *m, int privs);
 extern int mvc_schema_privs(mvc *m, sql_schema *t);
 extern int table_privs(mvc *m, sql_table *t, int privs);
-
+extern int column_privs(mvc *m, sql_column *c, int privs);
 extern int execute_priv(mvc *m, sql_func *f);
 
 extern int sql_privilege(mvc *m, sqlid auth_id, sqlid obj_id, int privs, int 
sub);
@@ -41,9 +41,9 @@ extern char *sql_revoke_role(mvc *m, str
 extern int sql_create_privileges(mvc *m, sql_schema *s);
 extern int sql_schema_has_user(mvc *m, sql_schema *s);
 
-
 extern char * sql_create_user(mvc *sql, char *user, char *passwd, char enc, 
char *fullname, char *schema);
 extern char * sql_drop_user(mvc *sql, char *user);
 extern char * sql_alter_user(mvc *sql, char *user, char *passwd, char enc, 
char *schema, char *oldpasswd);
 extern char * sql_rename_user(mvc *sql, char *olduser, char *newuser);
+
 #endif /*_SQL_PRIV_H_ */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to