c# - 使用 IS_MEMBER 在 Windows 窗体应用程序中测试权限有什么问题?
问题描述
我有使用连接字符串(windows auth)连接到 sql server 的 windows 窗体应用程序。
在表单加载事件中,我将使用类的方法执行IF IS_MEMBER('rolename') SELECT 1;
语句来检查用户是否属于某个角色。或。例如:db_datareader。如果查询返回 1,那么我将允许用户访问该应用程序。否则退出应用程序。目标是只允许此角色的成员使用我的应用程序。command.ExecuteScalar()
SqlCommand
SELECT IS_MEMBER('rolename');
这种方法有什么问题?什么是更好的解决方案?
解决方案
到目前为止,答案错过的一件事:
如果查询返回 1,那么我将允许用户访问该应用程序。否则退出应用程序。
错误的行为!但是,您在应用程序中实现权限的行为不应该只是简单地关闭应用程序 - 至少向用户提供有关为什么应用程序不会为他们启动的信息。
就实现而言,理想情况下,您应该使用 Azure AD 等身份提供程序。我知道您提到了 Windows 窗体,但此代码示例(用于 UWP)应该对实现提供一些想法:https ://github.com/Azure-Samples/active-directory-dotnet-native-uwp-v2
推荐阅读
- java - weblogic服务器中的jsf安全领域
- arrays - 如何合并与其他数组中的属性匹配的对象数组
- javascript - React.js Redux reducer 不插入项目
- api - [团队]如何通过 API 或 SDK 更新消息传递端点?
- c++ - 在 C++ WinRT 中无法获取异步操作结果(Windows::Foundation::IAsyncOperation 接口)
- twitter-bootstrap - 表单输入中的弹出窗口
- sql-server - 如何在 MSSQL Server 插入或更新触发器上获取行 ID
- java - 在 Control SWT 中适合背景图像
- material-components - 如何使 TextInputLayout 的提示文本垂直居中?
- asp.net - Angular2 显示 .NET API 验证消息