检查某些用户的数据库权限

时间:2013-07-31 06:57:27

标签: c# database sql-server-2008-r2

我被连接到另一家公司拥有的数据库。他们给我的用户限制了私有权限,因为我只能对某些视图进行选择查询。

我在这里遇到了一个问题,因为另一家公司没那么合作。他们在不告诉我的情况下更改了我的用户密码,或者他们更改了视图的名称。由于有超过40个视图,我想制作一个自动系统,检查一切是否正常。

我的问题是我可以对视图和数据库进行哪种检查?只是尝试连接打开并为每个视图进行选择*查询?

BTW数据库是SQLServer 2008 R2,我使用C#。

1 个答案:

答案 0 :(得分:1)

这是一个检查所有必需视图是否存在的函数:

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调用的函数: (请注意,他们假设您有一个名为_conn的连接的数据成员)

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;
}
相关问题