數據庫區分大小寫,創建視圖,表,索引的權限監測大全.(適應各種數據庫)

數據庫區分大小寫,創建視圖,表,索引的權限監測大全.(適應各種數據庫)
適應不同的數據庫. oracle,mysql, sqlserver,pgsql. 檢查連接用戶權限.

在需要安裝一個系統的時候,需要檢查當前數據庫連接用戶的權限是否符合要求,不同類型的數據庫判斷權限不同的方法.

爲了一勞永逸的解決問題,請參考這個馳騁工作流引擎用的檢查方法,

簡單粗暴最有效,  http://ccflow.org 歡迎使用馳騁BPM.

 

   /// <summary>
        /// 檢查是否可以安裝馳騁BPM系統
        /// </summary>
        /// <returns></returns>
        public static bool IsCanInstall()
        {
            string sql = "";

            string errInfo = "";
            try
            {
                errInfo = " 當前用戶沒有[查詢系統表]的權限. ";

                if (DBAccess.IsExitsObject("AA"))
                {
                    errInfo = " 當前用戶沒有[刪除表]的權限. ";
                    sql = "DROP TABLE AA";
                    BP.DA.DBAccess.RunSQL(sql);
                }

                errInfo = " 當前用戶沒有[創建表]的權限. ";
                sql = "CREATE TABLE AA (OID int NOT NULL)"; //檢查是否可以創建表.
                BP.DA.DBAccess.RunSQL(sql);

                errInfo = " 當前用戶沒有[插入數據]的權限. ";
                sql = "INSERT INTO AA (OID) VALUE(100 )"; 
                BP.DA.DBAccess.RunSQL(sql);

                errInfo = " 當前用戶沒有[update 表數據]的權限. ";
                sql = "UPDATE AA SET OID=101";
                BP.DA.DBAccess.RunSQL(sql);

                errInfo = " 當前用戶沒有[delete 表數據]的權限. ";
                sql = "DELETE FROM AA";
                BP.DA.DBAccess.RunSQL(sql);

                errInfo = " 當前用戶沒有[創建表主鍵]的權限. ";
                DBAccess.CreatePK("AA", "OID", SystemConfig.AppCenterDBType);

                errInfo = " 當前用戶沒有[創建索引]的權限. ";
                DBAccess.CreatIndex("AA", "OID"); //可否創建索引.


                errInfo = " 當前用戶沒有[查詢數據表]的權限. ";
                sql = "select * from AA "; //檢查是否有查詢的權限.
                BP.DA.DBAccess.RunSQLReturnTable(sql);

                errInfo = " 當前數據庫設置區分了大小寫,不能對大小寫敏感,如果是mysql數據庫請參考 https://blog.csdn.net/ccflow/article/details/100079825 ";
                sql = "select * from aa "; //檢查是否區分大小寫.
                BP.DA.DBAccess.RunSQLReturnTable(sql);

                if (DBAccess.IsExitsObject("AAVIEW"))
                {
                    errInfo = " 當前用戶沒有[刪除視圖]的權限. ";
                    sql = "DROP VIEW AAVIEW";
                    BP.DA.DBAccess.RunSQL(sql);
                }

                errInfo = " 當前用戶沒有[創建視圖]的權限.";
                sql = "CREATE VIEW AAVIEW AS SELECT * FROM AA "; //檢查是否可以創建視圖.
                BP.DA.DBAccess.RunSQL(sql);

                errInfo = " 當前用戶沒有[刪除視圖]的權限.";
                sql = "DROP VIEW AAVIEW"; //檢查是否可以刪除視圖.
                BP.DA.DBAccess.RunSQL(sql);

                errInfo = " 當前用戶沒有[刪除表]的權限.";
                sql = "DROP TABLE AA"; //檢查是否可以刪除表.
                BP.DA.DBAccess.RunSQL(sql);
                return true;
            }
            catch (Exception ex)
            {
                if (DBAccess.IsExitsObject("AA") == true)
                {
                    sql = "DROP TABLE AA";
                    BP.DA.DBAccess.RunSQL(sql);
                }

                if (DBAccess.IsExitsObject("AAVIEW") == true)
                {
                    sql = "DROP VIEW AAVIEW";
                    BP.DA.DBAccess.RunSQL(sql);
                }

                string info = "馳騁工作流引擎 - 檢查數據庫安裝權限出現錯誤:";
                info += "\t\n1. 當前登錄的數據庫帳號,必須有創建、刪除視圖或者table的權限。";
                info += "\t\n2. 必須對錶有增、刪、改、查的權限。 ";
                info += "\t\n3. 必須有刪除創建索引主鍵的權限。 ";
                info += "\t\n4. 我們建議您設置當前數據庫連接用戶爲管理員權限。 ";
                info += "\t\n ccbpm檢查出來的信息如下:" + errInfo;

                info += "\t\n etc: 數據庫測試異常信息:" + ex.Message;

                throw new Exception("err@" + info);
                //  return false;
            }
            return true;
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章