C# 执行前检查用户是否具有更新/选择/插入权限

C# 执行前检查用户是否具有更新/选择/插入权限,c#,sql-server,permissions,C#,Sql Server,Permissions,我正在构建一个在SQL Server上使用集成安全性的winforms应用程序。现在,我执行以下操作以确保通知用户他/她无权访问某个模式每个人都有select权限,但很少有人有update和insert权限 try { string sqlx = "select * from test.t"; SqlCommand comm = new SqlCommand(sqlx, conn); conn.Open

我正在构建一个在SQL Server上使用集成安全性的winforms应用程序。现在,我执行以下操作以确保通知用户他/她无权访问某个模式每个人都有select权限,但很少有人有update和insert权限

 try
        {
            string sqlx = "select * from test.t";
            SqlCommand comm = new SqlCommand(sqlx, conn);


            conn.Open();
            comm.ExecuteNonQuery();
            conn.Close();
            return;
        }
        catch (SqlException ex)
        {
            if (ex.Number == 229 | ex.Number == 230)
                System.Windows.Forms.MessageBox.Show("You do not have permission to update this table. Please contact your system admin for permission.");
            else
                System.Windows.Forms.MessageBox.Show(ex.Message);
        }

        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);

        }
        finally
        {
            conn.Close();
        }
例如,是否有一种方法可以从C中预筛选用户权限,而不是让用户甚至可以单击“删除”按钮

select fn_my_permissions('schema.tablename', 'OBJECT');
select fn_my_permissions('schema.tablename', 'OBJECT');
试试这个:

SELECT * FROM fn_my_permissions('dbo', 'SCHEMA')
它将返回针对所连接用户的“dbo”架构的权限列表:

entity_name subentity_name  permission_name
dbo         NULL            SELECT
dbo         NULL            INSERT
dbo         NULL            UPDATE
dbo         NULL            DELETE
dbo         NULL            REFERENCES
dbo         NULL            EXECUTE
dbo         NULL            VIEW CHANGE TRACKING
dbo         NULL            VIEW DEFINITION
dbo         NULL            ALTER
dbo         NULL            TAKE OWNERSHIP
dbo         NULL            CONTROL
因此,您可以根据需要查找插入或更新:

if exists (SELECT * FROM fn_my_permissions('dbo', 'SCHEMA') where permission_name = 'INSERT')
begin
    select 'Yes'
end
else
begin
    select 'No'
end
你可以做一个

select fn_my_permissions('schema.tablename', 'OBJECT');
select fn_my_permissions('schema.tablename', 'OBJECT');

按名称“schema.tablename”、“OBJECT”、“INSERT”排列


Has_perms是为2008年及其后安装的。

这两个答案正是我想要的。不完全是一个C解决方案,但仍然是一个应该运行良好的解决方案。非常感谢。即使要执行此查询,当前用户也需要权限。那么,有没有一种方法可以在SqlServer上获得用户的权限?