⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdbms.h

📁 使用yacc的一个例子
💻 H
字号:
#ifndef _SDBMS_H
#define _SDBMS_H

#include "Sdbms_GlobalDefines.h"
#include "Sdbms_DataStruct.h"

struct CSdbms_Cols
{
	CString		m_strFieldName;
	DataType	m_nDataType;
	UINT		m_nLength;
	BOOL		m_bKey;
	BOOL		m_bCanNull;
};

struct CSdbms_Values
{
	CSdbms_Values():m_pExpr(NULL), m_pSecLevel(NULL){}
	~CSdbms_Values()
	{
		if	(m_pExpr)
			delete m_pExpr;
		if	(m_pSecLevel)
			delete m_pSecLevel;
	}

	CSdbms_Express	*m_pExpr;
	CSdbms_SecurityLevel	*m_pSecLevel;
};

struct CSdbms_OrderList
{
	CString m_strFieldName;	//列名
	BOOL m_bAsc;	//是否是升序
};

class CSdbms
{
public:
	CSdbms();
	~CSdbms();

	CSdbms_AuditSetup	m_audit;			//审计设置表(全局)

	BOOL InitSystem(void);		//初始化系统数据
	BOOL SaveSystemDD(void);	//存储全局数据字典

	BOOL PreDropUser(CString strUserNames);
	BOOL PreDropRole(CString strRoleNames);
	BOOL PreSetParentRole(CString strParentRoleName, CString strChildRoleNames);
	BOOL PreSetChildRole(CString strParentRoleName, CString strChildRoleNames);
	BOOL PreSetTopRole(CString strRoleNames);
	BOOL PreAddUserToRole(CString strUserNames, CString strRoleNames);
	BOOL PreDelUserFromRole(CString strUserNames, CString strRoleNames);
	BOOL PreChangeRole(CString strUserName, CString strRoleName);
	BOOL PreGrant(CString strSystemRights, CString strRoleNames);
	BOOL PreRevoke(CString strSystemRights, CString strRoleNames);
	BOOL PreGrant(ObjectRight nObjectRight, CString strFieldNames, CString strTableName, CString strRoleNames, BOOL bCanGrant = FALSE, CSdbms_Condition *pCondition = NULL);
	BOOL PreRevoke(ObjectRight nObjectRight, CString strFieldNames, CString strTableName, CString strRoleNames, BOOL bRevokeGrant = FALSE, BOOL bRestrict = FALSE, CSdbms_Condition *pCondition = NULL);
	BOOL PreSetUserSecurityLevel(UINT nClassifaction, CString strUserNames);
	BOOL PreSetAllowSecurityLevel(CSdbms_SecurityLevel *pSecLevel, CString strUserNames, CString strTableNames);
	BOOL PreSetCurrentSecurityLevel(CSdbms_SecurityLevel *pSecLevel, CString strUserNames, CString strTableNames);
	BOOL PreSetTableSecurityLevel(CSdbms_SecurityLevel *pSecLevel, CString strTableNames);
	BOOL PreCreateTable(CString strTableName, UINT nColsCount, CSdbms_Cols *pCSdbms_Cols, CString strKeyColNames, CSdbms_SecurityLevel *pSecLevel=NULL);
	BOOL PreDropTable(CString strTableNames);
	BOOL PreInsert(CString strTableName, CString strFieldNames, UINT nValuesCount, CSdbms_Values *pValues);
	BOOL PreUpdate(CString strTableName, CString strFieldNames, UINT nValuesCount, CSdbms_Values *pValues, CSdbms_Condition *pCondition=NULL);
	BOOL PreSelect(UINT nExprCount, CSdbms_Express **ppExpr, CString strTableNames, CSdbms_Condition *pCondition, UINT nOrderCount, CSdbms_OrderList *pOrder, CSdbms_SecurityLevel *pSecLevel);
	BOOL PreAudit1(CString strUserNames, CString strRoleNames);
	BOOL PreAudit2(CString strObjectRights, CString strTableName, CString strUserNames, CString strRoleNames);
	BOOL PreAudit3(CString strSystemRights, CString strUserNames, CString strRoleNames);
	BOOL PreNoaudit1(CString strUserNames, CString strRoleNames);
	BOOL PreNoaudit2(CString strObjectRights, CString strTableName, CString strUserNames, CString strRoleNames);
	BOOL PreNoaudit3(CString strSystemRights, CString strUserNames, CString strRoleNames);

	BOOL DoConnectDB(CString strUserName, CString strPassword, CString strDBName="");
	BOOL DoCreateDatabase(CString strDatabaseName);
	BOOL DoDropDatabase(CString strDatabaseName);
	BOOL DoCreateUser(CString strUserName, CString strPassword, UINT nClass=2);
	BOOL DoDropUser(CString strUserName);
	BOOL DoCreateRole(CString strRoleName);
	BOOL DoDropRole(CString strRoleName);
	BOOL DoSetParentRole(CString strParentRoleName, CString strChildRoleName);
	BOOL DoSetChildRole(CString strParentRoleName, CString strChildRoleName);
	BOOL DoSetTopRole(CString strRoleName);
	BOOL DoAddUserToRole(CString strUserName, CString strRoleName);
	BOOL DoDelUserFromRole(CString strUserName, CString strRoleName);
	BOOL DoChangeRole(CString strUserName, CString strRoleNames);
	
	BOOL DoGrant(SystemRight nSystemRight, CString strRoleName);
	BOOL DoRevoke(SystemRight nSystemRight, CString strRoleName);
	BOOL DoGrant(ObjectRight nObjectRight, CString strTableName, CString strFieldName, CString strRoleName, BOOL bCanGrant = FALSE, CSdbms_Condition *pCondition = NULL);
	BOOL DoRevoke(ObjectRight nObjectRight, CString strTableName, CString strFieldName, CString strRoleName, BOOL bRevokeGrant = FALSE, BOOL bRestrict = FALSE, CSdbms_Condition *pCondition = NULL);
	
	BOOL DoSetUserSecurityLevel(CString strUserName, UINT nClassifaction);
	BOOL DoSetTableSecurityLevel(CString strTablename, CSdbms_SecurityLevel slTableSecLevel);
	BOOL DoSetAllowSecurityLevel(CString strUserName, CString strTableName, CSdbms_SecurityLevel slAllowSecLevel);
	BOOL DoSetCurrentSecurityLevel(CString strUserName, CString strTableName, CSdbms_SecurityLevel slCurrentSecLevel);

	BOOL DoCreateTable(CString strTableName, UINT nColsCount, CSdbms_Cols *pCSdbms_Cols, CSdbms_SecurityLevel *pSecLevel);
	BOOL DoDropTable(CString strTableName);
	BOOL DoInsert(CString strTableName, UINT nFieldCount, CString *strFieldName, UINT nValuesCount, CSdbms_Values *pValues);
	BOOL DoUpdate(CString strTableName, UINT nFieldCount, CString *strFieldName, UINT nValuesCount, CSdbms_Values *pValues, CSdbms_Condition *pCondition);
	BOOL DoDelete(CString strTableName, CSdbms_Condition *pCondition=NULL);
	BOOL DoSelect(UINT nExprCount, CSdbms_Express **ppExpr, UINT nTableCount, CString *strTableName, CSdbms_Condition *pCondition, UINT nOrderCount, CSdbms_OrderList *pOrder, CSdbms_SecurityLevel *pSecLevel);

	BOOL DoAuditUser(CString strUserName);
	BOOL DoAuditUser(ObjectRight nSqlID, CString strUserName, CString strTableName);
	BOOL DoAuditUser(SystemRight nSqlID,  CString strUserName);
	BOOL DoAuditRole(CString strRoleName);
	BOOL DoAuditRole(ObjectRight nSqlID, CString strRoleName, CString strTableName);
	BOOL DoAuditRole(SystemRight nSqlID,  CString strRoleName);
	BOOL DoNoauditUser(CString strUserName);
	BOOL DoNoauditUser(ObjectRight nSqlID, CString strUserName, CString strTableName);
	BOOL DoNoauditUser(SystemRight nSqlID,  CString strUserName);
	BOOL DoNoauditRole(CString strRoleName);
	BOOL DoNoauditRole(ObjectRight nSqlID, CString strRoleName, CString strTableName);
	BOOL DoNoauditRole(SystemRight nSqlID,  CString strRoleName);

	BOOL IsOwnSystemRole(UINT nUserID);						//用户是否属于SYSTEM角色
	BOOL IsOwnDbsaRole(UINT nUserID);						//用户是否属于DBA角色
	BOOL IsOwnDbaRole(UINT nUserID);						//用户是否属于DBSA角色
	BOOL IsUserOfRole(UINT nUserID, UINT nRoleID);			//是否用户属于角色

//	CSdbms_RoleUser*	GetDbaRoleUser();	//得到用户dba的DBA角色-用户关系
	CSdbms_User*		GetCurUser(){ return m_pCurUser; }	//得到当前用户指针
	CSdbms_Database*	GetCurDatabase(){ return m_pCurDB; }	//得到当前数据库
	CSdbms_Role*		GetDbaRole(){ return m_pDbaRole; }		//得到DBA角色
	CSdbms_Role*		GetDbsaRole(){ return m_pDbsaRole; }	//得到DBSA角色
	CSdbms_Role*		GetSystemRole(){ return m_pSystemRole; }//得到SYSTEM角色
	CSdbms_RoleUser*	FindRoleUser(CSdbms_User *pUser, CSdbms_Role *pRole);	//查找用户角色关系

	BOOL GetUser(CString strUserName, CSdbms_User **ppUser);		//根据用户名找到其指针
	BOOL GetUser(UINT nUserID, CSdbms_User **ppUser);				//根据用户内码找到其指针
	BOOL GetDatabase(CString strDBName, CSdbms_Database **ppDB);	//根据数据库名找到其指针
	BOOL GetDatabase(UINT nDBID, CSdbms_Database **ppDB);			//根据数据库内码找到其指针

public:
	CTypedPtrList<CPtrList, CSdbms_User*>		m_UserList;		//用户链表(dba是第一个用户)
	CTypedPtrList<CPtrList, CSdbms_Database*>	m_DBList;		//数据库链表
	CTypedPtrList<CPtrList, CSdbms_RoleUser*>	m_RoleUserList;	//按角色排序的角色用户关系表(全局角色)
	//(dba, m_pDbaRole)是链表中的首结点

private:
	CSdbms_Role	*m_pSystemRole;		//SYSTEM角色
	CSdbms_Role	*m_pDbsaRole;		//DBSA角色
	CSdbms_Role	*m_pDbaRole;		//DBA角色

	UINT	m_nMaxUserID;		//最大的用户内码
	UINT	m_nMaxDBID;			//最大的数据库内码

	CSdbms_User	*m_pCurUser;		//当前登录的用户
	CSdbms_Database	*m_pCurDB;		//当前连接的数据库

//	BOOL DelAllRole(CString strUserName);					//删除用户所有的角色

	BOOL HaveSystemRight(SystemRight nSqlID, CSdbms_User *pUser, CSdbms_Database *pDB=NULL, CString strTableName="");	//用户是否有系统权限
	BOOL HaveObjectRight(ObjectRight nObjectRight, CSdbms_User *pUser, CSdbms_Database *pDB, CSdbms_Table *pTable, CSdbms_Field *pField);	//用户是否有数据权限

	//Helper Functions
	UINT ParseStrings(CString string, CString *strParsed);	//分解带有逗号的字符串
	BOOL InsertRoleUserList(CSdbms_User *pUser, CSdbms_Role *pRole);	//插入到系统角色用户关系表中
	BOOL RemoveRoleUserList(CSdbms_User *pUser, CSdbms_Role *pRole);	//从系统角色用户关系表中删除
	void ReleaseMemory();

public:
	//Temp and Debug Functions
	void Output(CString strFileName);
//	void ViewRoleUserList();
//	void ViewDBRoleUserList(){m_pCurDB->ViewRoleUserList();}
//	void ViewDBUserRoleList(){m_pCurDB->ViewUserRoleList();}
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -