我正在构建一个在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#的用户权限?
答案 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');