对于某些用户,使用SQL Server,拒绝访问比特定日期更早的数据的简单而有效的方法是什么?SQL Server:拒绝sql用户访问旧数据的最佳方法
我们可以在应用程序级别(网络应用程序)执行此操作,但这会使我们容易受到IIS在我们的应用程序中被黑客入侵或出现错误等情况的影响。理想情况下,只有特定的SQL用户才能访问比几个月更早的特定数据。用最少的手段达到这个目标的好方法是什么?
如果它有所作为,我们的应用程序使用NHibernate。
对于某些用户,使用SQL Server,拒绝访问比特定日期更早的数据的简单而有效的方法是什么?SQL Server:拒绝sql用户访问旧数据的最佳方法
我们可以在应用程序级别(网络应用程序)执行此操作,但这会使我们容易受到IIS在我们的应用程序中被黑客入侵或出现错误等情况的影响。理想情况下,只有特定的SQL用户才能访问比几个月更早的特定数据。用最少的手段达到这个目标的好方法是什么?
如果它有所作为,我们的应用程序使用NHibernate。
纯SQL的解决方案是创建一个视图是这样的: -
CREATE USERVIEW AS (SELECT * FROM REALTABLE WHERE CREATE_DATE > CURRENT_DATE() - 30 DAYS)
不知道有多好这起与Hibernate,当然还有“CURRENT_DATE() - 30 DAYS”只会在合法DB2需要为每个DBMS使用不同的函数和语法。
SQL Server不提供行级安全性。这意味着您无法将SELECT授予某些行(比日期更新),同时拒绝给其他行。所有的GRANT/DENY/REVOKE都在整个桌面上工作。
有一些建议的解决方法,如使用视图,请参阅Granting Row-Level Permissions in SQL Server,但它们很麻烦且难于使用(特别是如果数据也要更新)。
如果可能,最好的办法是将数据移动到不同的表中。
您可以将旧数据存档到拥有更多受限制访问权限的表吗?
实现这一目标的正确方法是使用SQL Server business intelligence mechanisms对旧数据进行归档,但这不是一项即时任务,需要进行一些规划(并且这些机制在低端版本的SQL Server中不可用)。
+1视图 - 这似乎是它的理想场景。 – 2009-11-19 09:11:01