在ASP.NET WebForms应用程序中,我想允许最终用户浏览sql-server数据库中的选定原始数据。
但是,我想限制用户只能根据用户名查看部分数据的访问权限。
我不确定如何以用户可以理解的方式执行此操作,因为用户不一定知道SQL。
我有什么选择?
作为此基础,我考虑过为每个表创建一个sql函数。该函数应该返回允许用户查看的数据,例如,
CREATE FUNCTION ufn_RawData_Employee(@username nvarchar(256))
RETURNS TABLE
AS ( SELECT * FROM Employee
WHERE [@username is allowed to view the given Employee] )
在网页中,最终用户可能会输入类似SQL的语句,如
SELECT Name, HireDate FROM ((Employee))
然后在调用数据库之前,(([TableName]))
可以被ufn_RawData_[TableName]([UserName])
替换。
(出于安全原因,此类调用可以由sql用户执行,该用户的仅权限是对这些函数的SELECT权限。)
但是,对于最终用户来说,这种方法可能太难了。我想知道最终用户是否有更简单/用户友好的解决方案来浏览选定的原始数据?
答案 0 :(得分:1)
如果您只显示来自一个表或一个视图(可能更有用)的用户数据,那么您可以将该视图的名称存储在表中并使用函数检索它。然后,您可以在页面中显示数据,并确保标准选择脚本在必要时具有内置搜索功能。
如果用户只从一个表或视图获取数据,则无需编写SQL。如果您需要提供多个潜在的表/视图,那么让他们从下拉列表中进行选择,但允许他们编写自己的SQL查询并不值得。