2013-07-31 34 views
1

我被連接到另一家公司擁有的數據庫。他們給我的用戶限制了特權,因此我只能對某些視圖進行選擇查詢。檢查某個用戶的數據庫權限

我在這裏遇到了一些問題,因爲另一家公司沒有這麼合作。他們在不告訴我的情況下更改我的用戶密碼,或者他們更改視圖的名稱。由於有超過40個視圖,我想製作一個自動系統來檢查一切是否正常。

我的問題是我可以對視圖和數據庫進行什麼樣的檢查?只是嘗試打開連接併爲每個視圖創建select *查詢就足夠了?

順便說一句,數據庫是SQLServer 2008 R2,我使用C#。

回答

1

這裏是檢查所有需要的視圖中存在的函數: (普萊斯指出,他們假設你有一個名爲_conn連接的數據成員)

bool IsAllviewsExists() 
{ 
    string DatabaseName= "Your_DB_NAME"; 
    string[] viewsInDB = GetAllViewsNamesInDB(); 
    for (int i = 0; i < viewsInDB.Length; ++i) 
    { 
     using (SqlCommand cmd = CreateSqlCommand(String.Format("SELECT id FROM sysobjects WHERE ID = OBJECT_ID('{0}.dbo.{1}') AND (type = 'V')", DatabaseName,viewsInDB [i]))) 
     { 
      using (DataTable objects = ExecuteDataTableQuery(cmd)) 
      { 
       if (objects.Rows.Count == 0) 
       {        
        return false;        
       } 
      } 
     } 
    } 
    return true; 
} 

的是從IsAllviewsExists調用的函數

SqlCommand CreateSqlCommand(string sql, SqlParameterCollection parameters) 
{    
    SqlCommand cmd = _conn.CreateCommand(); 
    cmd.Connection = _conn;     

    cmd.CommandText = sql; 

    if (parameters != null) 
     foreach (SqlParameter param in parameters) 
        cmd.Parameters.Add(param); 
    return cmd; 
} 

DataTable ExecuteDataTableQuery(SqlCommand cmd) 
{    
    DataTable table = null; 

    using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) 
    { 
     table = new DataTable(); 
     try 
     {  
      adapter.Fill(table);  
     } 
     catch (SqlException sqlEx) 
     { 
      rethrow; 
     }  
    }  
    return table; 
}