【发布时间】:2016-05-03 02:16:25
【问题描述】:
使用 T-SQL 和 Microsoft SQL Server 2014,我试图找到一种方法来限制对不存在特定参数的表的访问。 p>
我可以在 SQL Server 2016 上执行此操作,方法是创建一个利用 SESSION_CONTEXT() 函数的函数,然后将其应用于我的架构。
由于我在 SQL Server 2014 中无权访问 SESSION_CONTEXT(),因此无法在当前会话上下文中获取指定键的值。
任何人都可以提出一个解决方案,使我能够规避在这种情况下使用 SESSION_CONTEXT() (或提出更好的解决方案)
SQL Server 2016 兼容的 T-SQL
CREATE SCHEMA RestrictSchema
GO
CREATE FUNCTION RestrictSchema.DenyWithoutParameter (@Parameter INT)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
SELECT 1 AS VALID_PARAMETER_SUPPLIED
WHERE @Parameter = CAST(SESSION_CONTEXT(N'@Parameter') AS INT)
GO
CREATE SECURITY POLICY RestrictSchema.ScehmaParameterRequirementForTableX
ADD FILTER PREDICATE RestrictSchema.DenyWithoutParameter (@Parameter) ON dbo.TableX
,ADD BLOCK PREDICATE RestrictSchema.DenyWithoutParameter (@Parameter) ON dbo.TableX
GO
【问题讨论】:
-
context_info 能满足您的需求吗?
-
我了解您在技术上想要完成的工作,但您为什么要尝试完成它?
标签: sql-server tsql sql-server-2014