blob: 8986dd903373f8ef31929598da1267918b6d6fee [file] [log] [blame]
//*****************************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
//// @@@ END COPYRIGHT @@@
//*****************************************************************************
#ifndef PRIVMGR_COMPONENTS_DEFS_H
#define PRIVMGR_COMPONENTS_DEFS_H
// *****************************************************************************
// *
// * Component definition section
// *
// * Several system components are created and managed by the database.
// * They are managed by two main structures:
// * ComponentListStruct - the list of components
// * ComponentOpStruct - the list of operations for each component
// *
// * To add a new component (assume xxx is component name):
// * Assign a UID (in enum ComponentOp add xxx_COMPONENT_UID)
// * Generate a component name (add new define called xxx_NAME)
// * Define component operations (add enum xxxOperation)
// * Define operation attributes (add ComponentOpStruct xxxOpStruct)
// * Add component to list (add component to componentList)
// *
// * To add a new operation to an existing component, see comments associated
// * with the component.
// *
// *****************************************************************************
// The ComponentOpStruct describes a component
// operationID - a number from xxxOperation representing the operation
// operationCode - unique 2 charater value that represents the operation
// operationName - unique name for the operation
// isRootRoleOp - grant DB__ROOTROLE this operation
// isAdminOp - grant DB__ADMIN/DB__ADMINROLE this operation
// isDMLOp - this is a DML operation
// isPublicOp - grant PUBLIC this operation
struct ComponentOpStruct
{
int32_t operationID;
const char * operationCode;
const char * operationName;
const bool isRootRoleOp;
const bool isAdminOp;
const bool isDMLOp;
const bool isPublicOp;
};
// The ComponentListStruct describes the relationship between a component UID,
// its name, the number of operations for the component, and a pointer to the
// list of operations.
// componentUID - the UID for the component
// componentName - the component name
// numOps - the number of operations in the component
// componentOps - pointer the ComponentOpStruct describing the operations
struct ComponentListStruct
{
int64_t componentUID;
const char * componentName;
int32_t numOps;
const ComponentOpStruct * componentOps;
};
// UID's for system component
// USER_COMPONENT_START_UID begins user defined components
enum ComponentOp{ INVALID_COMPONENT_UID = 0,
SQL_OPERATIONS_COMPONENT_UID = 1,
DBMGR_COMPONENT_UID = 2,
WMS_COMPONENT_UID = 3,
USER_COMPONENT_START_UID = 1000};
// List of components
#define SQL_OPERATIONS_NAME "SQL_OPERATIONS"
#define DBMGR_NAME "DBMGR"
#define WMS_NAME "WMS"
// Defines component operations for SQL_OPERATIONS:
// to add a new operation, add an entry to this list (in alphebetic order)
// and add a corresponding entry to the sqlOpList.
enum class SQLOperation {
ALTER = 2,
ALTER_LIBRARY,
ALTER_ROUTINE,
ALTER_ROUTINE_ACTION,
ALTER_SCHEMA,
ALTER_SEQUENCE,
ALTER_SYNONYM,
ALTER_TABLE,
ALTER_TRIGGER,
ALTER_VIEW,
CREATE,
CREATE_CATALOG,
CREATE_INDEX,
CREATE_LIBRARY,
CREATE_PROCEDURE,
CREATE_ROUTINE,
CREATE_ROUTINE_ACTION,
CREATE_SCHEMA,
CREATE_SEQUENCE,
CREATE_SYNONYM,
CREATE_TABLE,
CREATE_TRIGGER,
CREATE_VIEW,
DML_DELETE,
DML_EXECUTE,
DML_INSERT,
DML_REFERENCES,
DML_SELECT,
DML_SELECT_METADATA,
DML_UPDATE,
DML_USAGE,
DROP,
DROP_CATALOG,
DROP_INDEX,
DROP_LIBRARY,
DROP_PROCEDURE,
DROP_ROUTINE,
DROP_ROUTINE_ACTION,
DROP_SCHEMA,
DROP_SEQUENCE,
DROP_SYNONYM,
DROP_TABLE,
DROP_TRIGGER,
DROP_VIEW,
MANAGE,
MANAGE_COMPONENTS,
MANAGE_LIBRARY,
MANAGE_LOAD,
MANAGE_PRIVILEGES,
MANAGE_ROLES,
MANAGE_STATISTICS,
MANAGE_TENANTS,
MANAGE_USERS,
QUERY_ACTIVATE,
QUERY_CANCEL,
QUERY_SUSPEND,
REGISTER_HIVE_OBJECT,
REMAP_USER,
SHOW,
UNREGISTER_HIVE_OBJECT,
USE_ALTERNATE_SCHEMA,
FIRST_OPERATION = ALTER,
LAST_OPERATION = USE_ALTERNATE_SCHEMA,
NUMBER_OF_OPERATIONS = LAST_OPERATION - FIRST_OPERATION + 1,
UNKNOWN,
FIRST_DML_PRIV = DML_DELETE,
LAST_DML_PRIV = DML_USAGE
};
// Assign initial privileges for SQL_OPERATIONS (based on ComponentOpStruct):
// recommend that DB__ROOTROLE granted all non DML privileges
// recommend that DB__ADMIN and DB__ADMINROLE granted all non DML privileges
// recommend that PUBLIC granted only a small subset of privileges
static const ComponentOpStruct sqlOpList[] =
{
{(int32_t)SQLOperation::ALTER, "A0","ALTER",true,true,false,false},
{(int32_t)SQLOperation::ALTER_LIBRARY, "AL","ALTER_LIBRARY",true,false,false,false},
{(int32_t)SQLOperation::ALTER_ROUTINE, "AR","ALTER_ROUTINE",true,false,false,false},
{(int32_t)SQLOperation::ALTER_ROUTINE_ACTION,"AA","ALTER_ROUTINE_ACTION",true,false,false,false},
{(int32_t)SQLOperation::ALTER_SCHEMA, "AH","ALTER_SCHEMA",true,false,false,false},
{(int32_t)SQLOperation::ALTER_SEQUENCE, "AQ","ALTER_SEQUENCE",true,false,false,false},
{(int32_t)SQLOperation::ALTER_SYNONYM, "AY","ALTER_SYNONYM",true,false,false,false},
{(int32_t)SQLOperation::ALTER_TABLE, "AT","ALTER_TABLE",true,false,false,false},
{(int32_t)SQLOperation::ALTER_TRIGGER, "AG","ALTER_TRIGGER",true,false,false,false},
{(int32_t)SQLOperation::ALTER_VIEW, "AV","ALTER_VIEW",true,false,false,false},
{(int32_t)SQLOperation::CREATE, "C0","CREATE",true,true,false,false },
{(int32_t)SQLOperation::CREATE_CATALOG, "CC","CREATE_CATALOG",true,false,false,false},
{(int32_t)SQLOperation::CREATE_INDEX, "CI","CREATE_INDEX",true,false,false,false},
{(int32_t)SQLOperation::CREATE_LIBRARY, "CL","CREATE_LIBRARY",true,false,false,false},
{(int32_t)SQLOperation::CREATE_PROCEDURE, "CP","CREATE_PROCEDURE",true,false,false,false},
{(int32_t)SQLOperation::CREATE_ROUTINE, "CR","CREATE_ROUTINE",true,false,false,false},
{(int32_t)SQLOperation::CREATE_ROUTINE_ACTION,"CA","CREATE_ROUTINE_ACTION",true,false,false,false},
{(int32_t)SQLOperation::CREATE_SCHEMA, "CH","CREATE_SCHEMA",true,false,false,true},
{(int32_t)SQLOperation::CREATE_SEQUENCE, "CQ","CREATE_SEQUENCE",true,false,false,false},
{(int32_t)SQLOperation::CREATE_SYNONYM, "CY","CREATE_SYNONYM",true,false,false,false},
{(int32_t)SQLOperation::CREATE_TABLE, "CT","CREATE_TABLE",true,false,false,false},
{(int32_t)SQLOperation::CREATE_TRIGGER, "CG","CREATE_TRIGGER",true,false,false,false},
{(int32_t)SQLOperation::CREATE_VIEW, "CV","CREATE_VIEW",true,false,false,false},
{(int32_t)SQLOperation::DML_DELETE, "PD","DML_DELETE",false,false,true,false},
{(int32_t)SQLOperation::DML_EXECUTE, "PE","DML_EXECUTE",false,false,true,false},
{(int32_t)SQLOperation::DML_INSERT, "PI","DML_INSERT",false,false,true,false},
{(int32_t)SQLOperation::DML_REFERENCES, "PR","DML_REFERENCES",false,false,true,false},
{(int32_t)SQLOperation::DML_SELECT, "PS","DML_SELECT",false,false,true,false},
{(int32_t)SQLOperation::DML_SELECT_METADATA,"PM","DML_SELECT_METADATA",true,true,true,false},
{(int32_t)SQLOperation::DML_UPDATE, "PU","DML_UPDATE",false,false,true,false},
{(int32_t)SQLOperation::DML_USAGE, "PG","DML_USAGE",false,false,true,false},
{(int32_t)SQLOperation::DROP, "D0","DROP",true,true,false,false },
{(int32_t)SQLOperation::DROP_CATALOG, "DC","DROP_CATALOG",true,false,false,false},
{(int32_t)SQLOperation::DROP_INDEX, "DI","DROP_INDEX",true,false,false,false},
{(int32_t)SQLOperation::DROP_LIBRARY, "DL","DROP_LIBRARY",true,false,false,false},
{(int32_t)SQLOperation::DROP_PROCEDURE, "DP","DROP_PROCEDURE",true,false,false,false},
{(int32_t)SQLOperation::DROP_ROUTINE, "DR","DROP_ROUTINE",true,false,false,false},
{(int32_t)SQLOperation::DROP_ROUTINE_ACTION,"DA","DROP_ROUTINE_ACTION",true,false,false,false},
{(int32_t)SQLOperation::DROP_SCHEMA, "DH","DROP_SCHEMA",true,false,false,false},
{(int32_t)SQLOperation::DROP_SEQUENCE, "DQ","DROP_SEQUENCE",true,false,false,false},
{(int32_t)SQLOperation::DROP_SYNONYM, "DY","DROP_SYNONYM",true,false,false,false},
{(int32_t)SQLOperation::DROP_TABLE, "DT","DROP_TABLE",true,false,false,false},
{(int32_t)SQLOperation::DROP_TRIGGER, "DG","DROP_TRIGGER",true,false,false,false},
{(int32_t)SQLOperation::DROP_VIEW, "DV","DROP_VIEW",true,false,false,false},
{(int32_t)SQLOperation::MANAGE, "M0","MANAGE",true,true,false,false},
{(int32_t)SQLOperation::MANAGE_COMPONENTS, "MC","MANAGE_COMPONENTS",true,false,false,false},
{(int32_t)SQLOperation::MANAGE_LIBRARY, "ML","MANAGE_LIBRARY",true,false,false,false},
{(int32_t)SQLOperation::MANAGE_LOAD, "MT","MANAGE_LOAD",true,false,false,false},
{(int32_t)SQLOperation::MANAGE_PRIVILEGES, "MP","MANAGE_PRIVILEGES",true,false,false,false},
{(int32_t)SQLOperation::MANAGE_ROLES, "MR","MANAGE_ROLES",true,false,false,false},
{(int32_t)SQLOperation::MANAGE_STATISTICS, "MS","MANAGE_STATISTICS",true,false,false,false},
{(int32_t)SQLOperation::MANAGE_TENANTS, "MX","MANAGE_TENANTS",true,false,false,false},
{(int32_t)SQLOperation::MANAGE_USERS, "MU","MANAGE_USERS",true,false,false,false},
{(int32_t)SQLOperation::QUERY_ACTIVATE, "QA","QUERY_ACTIVATE",true,true,false,false},
{(int32_t)SQLOperation::QUERY_CANCEL, "QC","QUERY_CANCEL",true,true,false,false},
{(int32_t)SQLOperation::QUERY_SUSPEND, "QS","QUERY_SUSPEND",true,true,false,false},
{(int32_t)SQLOperation::REGISTER_HIVE_OBJECT, "RH","REGISTER_HIVE_OBJECT",true,true,false,false},
{(int32_t)SQLOperation::REMAP_USER, "RU","REMAP_USER",true,true,false,false},
{(int32_t)SQLOperation::SHOW, "SW","SHOW",true,true,false,false},
{(int32_t)SQLOperation::UNREGISTER_HIVE_OBJECT, "UH","UNREGISTER_HIVE_OBJECT",true,true,false,false},
{(int32_t)SQLOperation::USE_ALTERNATE_SCHEMA, "UA","USE_ALTERNATE_SCHEMA",true,true,false,false}
};
// Defines the component operations for DBMGR:
// add an entry to this list for new DBMGR operations(in alphabetic order)
// and to the corresponding dbmgrOpList
enum class DBMGROperation {
MANAGE_ALERTS = 2,
MANAGE_SESSIONS,
SHOW_ACTIVE_QUERIES,
SHOW_EVENT_LOGS,
SHOW_REPOS_QUERIES
};
// Assign initial privileges for DBMGROperation (based on ComponentOpStruct):
static const ComponentOpStruct dbmgrOpList[] =
{
{(int32_t)DBMGROperation::MANAGE_ALERTS, "MA","MANAGE_ALERTS",true,true,false,false},
{(int32_t)DBMGROperation::MANAGE_SESSIONS, "MS","MANAGE_SESSIONS",true,true,false,false},
{(int32_t)DBMGROperation::SHOW_ACTIVE_QUERIES, "AQ","SHOW_ACTIVE_QUERIES",true,true,false,false},
{(int32_t)DBMGROperation::SHOW_EVENT_LOGS, "EL","SHOW_EVENT_LOGS",true,true,false,false},
{(int32_t)DBMGROperation::SHOW_REPOS_QUERIES, "RQ","SHOW_REPOS_QUERIES",true,true,false,false}
};
// Defines the component operations for WMS:
// add an entry to this list for new WMS operations (in alphabetic order)
// and to the corresponding wmsOpList
enum class WMSOperation {
MANAGE_WMS = 2
};
// Assign initial privileges for DBMGROperation (based on ComponentOpStruct):
static const ComponentOpStruct wmsOpList[] =
{
{(int32_t)WMSOperation::MANAGE_WMS, "MW","MANAGE_WMS",true,true,false,false},
};
// List of components
static const ComponentListStruct componentList[]
{ { (int64_t)SQL_OPERATIONS_COMPONENT_UID, SQL_OPERATIONS_NAME, sizeof(sqlOpList)/sizeof(ComponentOpStruct), (ComponentOpStruct *)&sqlOpList },
{ (int64_t)DBMGR_COMPONENT_UID, DBMGR_NAME, sizeof(dbmgrOpList)/sizeof(ComponentOpStruct), (ComponentOpStruct *)&dbmgrOpList },
{ (int64_t)WMS_COMPONENT_UID, WMS_NAME, sizeof(wmsOpList)/sizeof(ComponentOpStruct), (ComponentOpStruct *)&wmsOpList } };
#endif