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

时间:2015-04-13 18:39:24

标签: c# sql-server permissions

我正在构建一个在SQL Server上使用集成安全性的winforms应用程序。现在,我执行以下操作以确保用户被告知他/她无权访问某个架构(每个人都有选择权限,但很少有更新和插入)。

 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#的用户权限?

3 个答案:

答案 0 :(得分:5)

试试这个:

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

所以你可以根据需要寻找INSERT或UPDATE:

if exists (SELECT * FROM fn_my_permissions('dbo', 'SCHEMA') where permission_name = 'INSERT')
begin
    select 'Yes'
end
else
begin
    select 'No'
end

答案 1 :(得分:1)

你可以做一个

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

HAS_PERMS_BY_NAME(' schema.tablename',' OBJECT',' INSERT')

Has_perms已安装于2008年及之后。

答案 2 :(得分:0)

你可以做一个

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