执行前检查用户是否有 Update/Select/Insert 权限
Check if user has Update/Select/Insert permissions before execute
我正在构建一个在 SQL 服务器上使用集成安全性的 winforms 应用程序。现在,我执行以下操作以确保通知用户 he/she 无法访问某个模式(每个人都有 select 权限,但很少有人有更新和插入)。
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# 中 "prescreen" 用户权限,而不是让用户甚至可以单击删除按钮?
你可以做一个
select fn_my_permissions('schema.tablename', 'OBJECT');
试试这个:
SELECT * FROM fn_my_permissions('dbo', 'SCHEMA')
它将 return 针对已连接用户的 '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
你可以做一个
select fn_my_permissions('schema.tablename', 'OBJECT');
或
HAS_PERMS_BY_NAME('schema.tablename','OBJECT','INSERT')
Has_perms 是为 2008 年及之后安装的。
我正在构建一个在 SQL 服务器上使用集成安全性的 winforms 应用程序。现在,我执行以下操作以确保通知用户 he/she 无法访问某个模式(每个人都有 select 权限,但很少有人有更新和插入)。
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# 中 "prescreen" 用户权限,而不是让用户甚至可以单击删除按钮?
你可以做一个
select fn_my_permissions('schema.tablename', 'OBJECT');
试试这个:
SELECT * FROM fn_my_permissions('dbo', 'SCHEMA')
它将 return 针对已连接用户的 '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
你可以做一个
select fn_my_permissions('schema.tablename', 'OBJECT');
或
HAS_PERMS_BY_NAME('schema.tablename','OBJECT','INSERT')
Has_perms 是为 2008 年及之后安装的。