首页 > 解决方案 > 使用 IS_MEMBER 在 Windows 窗体应用程序中测试权限有什么问题?

问题描述

我有使用连接字符串(windows auth)连接到 sql server 的 windows 窗体应用程序。

在表单加载事件中,我将使用类的方法执行IF IS_MEMBER('rolename') SELECT 1;语句来检查用户是否属于某个角色。或。例如:db_datareader。如果查询返回 1,那么我将允许用户访问该应用程序。否则退出应用程序。目标是只允许此角色的成员使用我的应用程序。command.ExecuteScalar()SqlCommandSELECT IS_MEMBER('rolename');

这种方法有什么问题?什么是更好的解决方案?

标签: c#sql-serverconnection-string

解决方案


到目前为止,答案错过的一件事:

如果查询返回 1,那么我将允许用户访问该应用程序。否则退出应用程序。

错误的行为!但是,您在应用程序中实现权限的行为不应该只是简单地关闭应用程序 - 至少向用户提供有关为什么应用程序不会为他们启动的信息。

就实现而言,理想情况下,您应该使用 Azure AD 等身份提供程序。我知道您提到了 Windows 窗体,但此代码示例(用于 UWP)应该对实现提供一些想法:https ://github.com/Azure-Samples/active-directory-dotnet-native-uwp-v2


推荐阅读