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