数据中没有用户名的SQL Server行级安全性



我是一名学生,我们有一部分作业要在SQL Server中开发一个SQL脚本,以启用行级安全性,该脚本允许某个用户配置文件/组(Sales1(仅查看表(Sales.CreditCards(中的行,该表存在于Sales架构中,其中信用卡类型列(CardType(的值为"Vista"。

数据库:Microsoft AdventureWorks2017

它是一个公开的教育数据源(5.5GB(

任务6:添加一个安全策略,允许sales1用户只查看Vista信用卡行。

我能在网上找到的每一个实现行级安全性的例子都是基于表构建的,这些表在表数据本身中包含用户名或特权名称。例如,只显示属于Tom的Tom的列,其中Tom的名称位于数据集的列中。我找不到任何将筛选器应用于数据集中没有用户名的数据的示例。

这是我迄今为止为这项任务设置的脚本,但我收到了多个错误。请提供一些指导,或者为我指明正确的方向。

更新:我想好了如何让它发挥作用!问题解决了!

当我通过了最初的错误代码并使脚本工作时,问题是我试图将值"Vista"从末尾的"创建安全策略"部分传递到要在WHERE子句中进行比较的脚本中。然而,这是一种落后的逻辑。

相反,在";创建安全策略";应该是要筛选的列标题,而不是期望的值";。然后可以在where子句中定义该值,如下所示。

错误


脚本

USE AdventureWorks2017
GO
EXECUTE AS USER = 'Sales1';
SELECT * FROM [Sales].[CreditCard]
REVERT;
GO

验证

PD_3

UPDATE:我想好了如何让它工作!问题解决了!!当我通过了最初的错误代码并使脚本工作时,问题是我试图将值"Vista"从末尾的"创建安全策略"部分传递到要在WHERE子句中进行比较的脚本中。然而,这是一种落后的逻辑。相反,在";创建安全策略";应该是要筛选的列标题,而不是期望的值";。然后可以在where子句中定义该值,如下所示。

相关内容

最新更新