brh*_*ick 0 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();
}
Run Code Online (Sandbox Code Playgroud)
例如,除了让用户甚至没有单击删除按钮的能力之外,还有没有办法从C#中“预筛选”用户权限?
尝试这个:
SELECT * FROM fn_my_permissions('dbo', 'SCHEMA')
Run Code Online (Sandbox Code Playgroud)
它将为连接的用户返回针对'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
Run Code Online (Sandbox Code Playgroud)
因此,您可以根据需要查找INSERT或UPDATE:
if exists (SELECT * FROM fn_my_permissions('dbo', 'SCHEMA') where permission_name = 'INSERT')
begin
select 'Yes'
end
else
begin
select 'No'
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3734 次 |
| 最近记录: |