* This file is part of the oGRAC project.
* Copyright (c) 2024 Huawei Technologies Co.,Ltd.
*
* oGRAC is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*
* ogsql_privilege.h
*
*
* IDENTIFICATION
* src/ogsql/executor/ogsql_privilege.h
*
* -------------------------------------------------------------------------
*/
#ifndef __SQL_PRIVILEGE_H__
#define __SQL_PRIVILEGE_H__
#include "cm_defs.h"
#include "ogsql_context.h"
#include "ogsql_stmt.h"
#include "knl_interface.h"
#include "knl_privilege.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef status_t (*sys_privs_chk_func)(sql_stmt_t *stmt, sys_privs_id base_privid, sys_privs_id any_privid);
typedef struct st_priv_tab_def {
sys_privs_id base_privid;
sys_privs_id any_privid;
sys_privs_chk_func proc;
} priv_tab_def;
typedef struct st_sql_priv_check_t {
priv_type_def priv_type;
galist_t *priv_list;
text_t *objowner;
text_t *objname;
object_type_t objtype;
} sql_priv_check_t;
status_t sql_check_trigger_priv(sql_stmt_t *stmt, void *entity_in);
status_t sql_check_privilege(sql_stmt_t *stmt, bool32 need_lock_ctrl);
status_t sql_check_seq_priv(sql_stmt_t *stmt, text_t *user, text_t *seqname);
status_t sql_check_library_priv_core(sql_stmt_t *stmt, text_t *obj_owner, text_t *obj_name, text_t *curr_user);
status_t sql_check_proc_priv_core(sql_stmt_t *stmt, text_t *obj_owner, text_t *obj_name, text_t *curr_user);
status_t sql_check_type_priv_core(sql_stmt_t *stmt, text_t *obj_owner, text_t *obj_name, text_t *curr_user);
status_t sql_check_inherit_priv(sql_stmt_t *stmt, text_t *obj_user);
status_t sql_check_exec_type_priv(sql_stmt_t *stmt, text_t *obj_owner, text_t *obj_name);
status_t sql_check_grant_revoke_priv(sql_stmt_t *stmt, sql_priv_check_t *priv_check);
status_t sql_check_user_select_priv(knl_session_t *session, text_t *checked_user, text_t *owner, text_t *obj_name,
object_type_t obj_type, bool32 for_update);
bool32 sql_user_is_dba(session_t *session);
bool32 sql_check_schema_priv(session_t *session, text_t *obj_schema);
bool32 sql_check_stats_priv(session_t *session, text_t *obj_schema);
bool32 sql_check_policy_exempt(session_t *session);
status_t sql_check_profile_priv(sql_stmt_t *stmt, sys_privs_id base_privid, sys_privs_id any_privid);
status_t sql_check_priv(sql_stmt_t *stmt, text_t *curr_user, text_t *object_user, sys_privs_id base_privid,
sys_privs_id any_privid);
status_t sql_check_table_priv_by_name(sql_stmt_t *stmt, text_t *curr_user, text_t *owner, text_t *obj_name,
uint32 priv_id);
status_t sql_check_user_tenant(knl_session_t *session);
status_t sql_check_xa_priv(knl_session_t *session, xa_xid_t *xa_xid);
status_t sql_check_dump_priv(sql_stmt_t *stmt, knl_alter_sys_def_t *def);
status_t sql_check_pl_dc_lst_priv(sql_stmt_t *stmt, galist_t *pl_dc_lst, text_t *checked_user);
status_t sql_check_create_trig_priv(sql_stmt_t *stmt, text_t *obj_owner, text_t *table_user);
status_t sql_check_ple_dc_priv(sql_stmt_t *stmt, void *pl_dc_in);
status_t sql_check_dml_privs(sql_stmt_t *stmt, bool32 need_lock_ctrl);
#ifdef __cplusplus
}
#endif
#endif