检查特定用户的数据库权限

本文关键字:数据库 权限 用户 检查 | 更新日期: 2023-09-27 18:25:32

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

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

我的问题是,我可以对视图和数据库进行什么样的检查?仅仅尝试打开连接并对每个视图进行select*查询就足够了吗?

顺便说一句,数据库是SQLServer2008R2,我使用C#。

检查特定用户的数据库权限

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

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;
}