char * sql_create_user(mvc *sql, char *user, char *passwd, char enc, char *fullname, char *schema) { char *err; int schema_id = 0; if (backend_find_user(sql, user) >= 0) { return sql_message("42M31!CREATE USER: user '%s' already exists", user); } if ((schema_id = sql_find_schema(sql, schema)) < 0) { return sql_message("3F000!CREATE USER: no such schema '%s'", schema); } if ((err = backend_create_user(sql, user, passwd, enc, fullname, schema_id, sql->user_id)) != NULL) { /* strip off MAL exception decorations */ char *r; char *e = err; if ((e = strchr(e, ':')) == NULL) { e = err; } else if ((e = strchr(++e, ':')) == NULL) { e = err; } else { e++; } r = sql_message("M0M27!CREATE USER: %s", e); _DELETE(err); return r; } return NULL; }
static void monet5_create_privileges(ptr _mvc, sql_schema *s) { sql_table *t, *uinfo; mvc *m = (mvc *) _mvc; char *err = NULL; int schema_id = 0; str monetdbuser = "******"; list *res, *ops; /* create the authorisation related tables */ t = mvc_create_table(m, s, "db_user_info", tt_table, 1, SQL_PERSIST, 0, -1); mvc_create_column_(m, t, "name", "varchar", 1024); mvc_create_column_(m, t, "fullname", "varchar", 2048); mvc_create_column_(m, t, "default_schema", "int", 9); uinfo = t; (void) err; res = sa_list(m->sa); list_append(res, sql_create_arg(m->sa, "name", sql_bind_subtype(m->sa, "varchar", 2048, 0), ARG_OUT)); /* add function */ ops = sa_list(m->sa); /* following funcion returns a table (single column) of user names with the approriate scenario (sql) */ mvc_create_func(m, NULL, s, "db_users", ops, res, F_UNION, FUNC_LANG_SQL, "sql", "db_users", "CREATE FUNCTION db_users () RETURNS TABLE( name varchar(2048)) EXTERNAL NAME sql.db_users;", FALSE, FALSE); t = mvc_create_view(m, s, "users", SQL_PERSIST, "SELECT u.\"name\" AS \"name\", " "ui.\"fullname\", ui.\"default_schema\" " "FROM db_users() AS u LEFT JOIN " "\"sys\".\"db_user_info\" AS ui " "ON u.\"name\" = ui.\"name\" " ";", 1); mvc_create_column_(m, t, "name", "varchar", 1024); mvc_create_column_(m, t, "fullname", "varchar", 2024); mvc_create_column_(m, t, "default_schema", "int", 9); schema_id = sql_find_schema(m, "sys"); assert(schema_id >= 0); table_funcs.table_insert(m->session->tr, uinfo, monetdbuser, "MonetDB Admin", &schema_id); }
char * sql_alter_user(mvc *sql, char *user, char *passwd, char enc, char *schema, char *oldpasswd) { sqlid schema_id = 0; /* we may be called from MAL (nil) */ if (user != NULL && strcmp(user, str_nil) == 0) user = NULL; /* USER == NULL -> current_user */ if (user != NULL && backend_find_user(sql, user) < 0) return sql_message("42M32!ALTER USER: no such user '%s'", user); if (sql->user_id != USER_MONETDB && sql->role_id != ROLE_SYSADMIN && user != NULL && strcmp(user, stack_get_string(sql, "current_user")) != 0) return sql_message("M1M05!ALTER USER: insufficient privileges to change user '%s'", user); if (schema && (schema_id = sql_find_schema(sql, schema)) < 0) { return sql_message("3F000!ALTER USER: no such schema '%s'", schema); } if (backend_alter_user(sql, user, passwd, enc, schema_id, oldpasswd) == FALSE) return sql_message("M0M27!%s", sql->errstr); return NULL; }