Sql-Server

如何使用 where 子句限制動態數據屏蔽?

  • July 29, 2020

我有興趣在表中的行子集上使用 SQL Server 動態數據屏蔽。是否有可能做到這一點?

例如,我有一個包含電子郵件地址的使用者表。我不想為我公司的內部使用者屏蔽記錄。我想使用 where 子句,例如where email not like '%acme.com'.

在查看了回復後,我意識到我需要進一步澄清。我希望所有非管理使用者都能看到相同的查詢結果。當他們查詢 users 表時,不應屏蔽帶有 acme.com 電子郵件的結果行,而應屏蔽帶有不同電子郵件域的結果行。

我不認為這(僅屏蔽表中的某些行)可以通過動態數據屏蔽來完成。

您可以通過執行以下操作來創建一個視圖,該視圖將執行您想做的事情:

create table email (id int identity, email varchar(100));
insert into email values ('mail1@hotmail.com'),('email2@gmail.com'),('email3@mycmp.com');
go

create view email_filter as
select case when email like '%@mycmp.com' then email 
else left(email,charindex('@', email,0)) end "email" 
from email
go

select * from email_filter;

drop table email
drop view email_filter

請注意,這不會屏蔽“電子郵件”表中的數據,因此如果您想確保使用者無法訪問它,則必須限制訪問。

另請注意,這有一些限制。如果您希望視圖返回如下查詢的結果:

Select * from email_filter where email like ‘%hotmail.com’

它不會返回任何行。

引用自:https://dba.stackexchange.com/questions/271736