blob: 312cbab33d350d6d1d758a9841748ce34e3c000a [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_COMMANDS_H
#define PRIVMGR_COMMANDS_H
#include <string>
#include <vector>
#include <bitset>
#include <iterator>
#include "PrivMgrMD.h"
#include "PrivMgrDefs.h"
#include "TrafDDLdesc.h"
#include "ComSecurityKey.h"
#include "PrivMgrUserPrivs.h"
class ComDiagsArea;
class ComSecurityKey;
struct TrafDesc;
// *****************************************************************************
// This file contains classes used by callers of privilege manager
//
// Privilege manager (PrivMgr) is a component that manages metadata associated
// with privileges. This includes granting/revoking object and component (and
// eventually column) privileges, returning privilege descriptions in the form
// of grant statements for SHOWDDL, returning privileges on objects for
// specific users, and commands to support components
// *****************************************************************************
// Contents of file
class PrivMgrCommands;
// Forward references
class PrivMgrPrivileges;
class NATable;
// *****************************************************************************
// *
// * Class: PrivMgrCommands
// * Description: This class represents the commands that can be performed
// * through the privilege manager component
// *
// *****************************************************************************
class PrivMgrCommands : public PrivMgr
{
public:
// ---------------------------------------------------------------------
// Constructors/Destructor
// ---------------------------------------------------------------------
PrivMgrCommands ();
PrivMgrCommands (
const std::string trafMetadataLocation,
const std::string &metadataLocation,
ComDiagsArea *pDiags,
PrivMDStatus authorizationEnabled = PRIV_INITIALIZE_UNKNOWN );
PrivMgrCommands ( const std::string &metadataLocation
, ComDiagsArea *pDiags
, PrivMDStatus authorizationEnabled = PRIV_INITIALIZE_UNKNOWN );
PrivMgrCommands ( const PrivMgrCommands &rhs );
virtual ~PrivMgrCommands ( void );
// ------------------------------------------------------------------------
// Operations:
// ------------------------------------------------------------------------
bool authorizationEnabled();
PrivStatus createComponentOperation(
const std::string & componentName,
const std::string & operationName,
const std::string & operationCode,
bool isSystem,
const std::string & operationDescription);
bool describeComponents(const std::string & componentName,
std::vector<std::string> & outlines);
bool describePrivileges(
PrivMgrObjectInfo &objectInfo,
std::string &privilegeText);
PrivStatus dropAuthorizationMetadata(bool doCleanup);
PrivStatus dropComponentOperation(
const std::string & componentName,
const std::string & operationName,
PrivDropBehavior dropBehavior);
PrivStatus getGrantorDetailsForObject(
const bool isGrantedBySpecified,
const std::string grantedByName,
const int_32 objectOwner,
int_32 &effectiveGrantorID,
std::string &effectiveGrantorName);
PrivStatus getPrivileges(
NATable *naTable,
const int32_t granteeUID,
PrivMgrUserPrivs &userPrivileges,
std::vector <ComSecurityKey *>* secKeySet = NULL);
PrivStatus getPrivileges(
const int64_t objectUID,
ComObjectType objectType,
std::vector<PrivMgrDesc> &userPrivileges);
PrivStatus getPrivileges(
const int64_t objectUID,
ComObjectType objectType,
const int32_t granteeUID,
PrivMgrUserPrivs &userPrivileges,
std::vector <ComSecurityKey *>* secKeySet = NULL);
PrivStatus getPrivRowsForObject(
const int64_t objectUID,
std::vector<ObjectPrivsRow> & objectPrivsRows);
PrivStatus getRoles(
const int32_t grantee,
std::vector<int32_t> &roleIDs);
PrivStatus givePrivForObjects(
const int32_t currentOwnerID,
const int32_t newOwnerID,
const std::string &newOwnerName,
const std::vector<int64_t> &objectUIDs);
PrivStatus grantComponentPrivilege(
const std::string & componentName,
const std::vector<std::string> & operationNamesList,
const int32_t grantorID,
const std::string & grantorName,
const int32_t granteeID,
const std::string & granteeName,
const int32_t grantDepth);
PrivStatus grantObjectPrivilege(
const int64_t objectUID,
const std::string &objectName,
const ComObjectType objectType,
const int32_t granteeUID,
const std::string &granteeName,
const int32_t grantorUID,
const std::string &grantorName,
const std::vector<PrivType> &privs,
const std::vector<ColPrivSpec> & colPrivsArray,
const bool isAllSpecified,
const bool isWGOSpecified);
PrivStatus grantObjectPrivilege(
const int64_t objectUID,
const std::string &objectName,
const ComObjectType objectType,
const int32_t grantorUID,
const int32_t granteeUID,
const PrivMgrBitmap &objectPrivs,
const PrivMgrBitmap &grantablePrivs);
PrivStatus grantRole(
const std::vector<int32_t> & roleIDs,
const std::vector<std::string> & roleNames,
const std::vector<int32_t> & grantorIDs,
const std::vector<std::string> & grantorNames,
PrivAuthClass grantorClass,
const std::vector<int32_t> & granteeIDs,
const std::vector<std::string> & granteeNames,
const std::vector<PrivAuthClass> & granteeClasses,
const int32_t grantDepth);
PrivStatus initializeAuthorizationMetadata(
const std::string &objectsLocation,
const std::string &authsLocation,
const std::string &colsLocation,
std::vector<std::string> &tablesCreated,
std::vector<std::string> &tablesUpgraded);
PrivStatus insertPrivRowsForObject(
const int64_t objectUID,
const std::vector<ObjectPrivsRow> & objectPrivsRows);
bool isPrivMgrTable(const std::string &objectName);
PrivStatus registerComponent(
const std::string &componentName,
const bool isSystem,
const std::string &componentDetails);
PrivStatus revokeComponentPrivilege(
const std::string & componentName,
const std::vector<std::string> & operationNamesList,
const int32_t grantorID,
const int32_t granteeID,
const bool isGOFSpecified,
PrivDropBehavior dropBehavior);
PrivStatus revokeObjectPrivilege(
const int64_t objectUID,
const std::string &objectName,
const ComObjectType objectType,
const int32_t granteeUID,
const std::string &granteeName,
const int32_t grantorUID,
const std::string &grantorName,
const std::vector<PrivType> &privs,
const std::vector<ColPrivSpec> & colPrivsArray,
const bool isAllSpecified,
const bool isGOFSpecified);
PrivStatus revokeObjectPrivilege(
const int64_t objectUID,
const std::string &objectName,
const int32_t grantorUID);
PrivStatus revokeRole(
const std::vector<int32_t> & roleIDs,
const std::vector<int32_t> & granteeIDs,
const std::vector<PrivAuthClass> & granteeClasses,
const std::vector<int32_t> & grantorIDs,
const bool isGOFSpecified,
const int32_t newGrantDepth,
PrivDropBehavior dropBehavior);
PrivStatus unregisterComponent(
const std::string & componentName,
PrivDropBehavior dropBehavior);
// -------------------------------------------------------------------
// Accessors:
// -------------------------------------------------------------------
inline ComDiagsArea * getDiags (void) {return pDiags_;}
inline const std::string getMetadataLocation (void) {return metadataLocation_;}
inline const std::string getTrafMetadataLocation (void) { return trafMetadataLocation_;}
protected:
// -------------------------------------------------------------------
// Mutators:
// -------------------------------------------------------------------
inline void setDiags (ComDiagsArea *pDiags) {pDiags_ = pDiags;}
inline void setMetadataLocation (std::string &metadataLocation)
{ metadataLocation_ = metadataLocation; }
inline void setTrafMetadataLocation (std::string &trafMetadataLocation)
{ trafMetadataLocation_ = trafMetadataLocation; }
private:
// -------------------------------------------------------------------
// Private accessors:
// -------------------------------------------------------------------
PrivMgrCommands& operator=(const PrivMgrCommands& other);
}; // class PrivMgrCommands
#endif