📄 sdbms.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 + -