Sql-Server
如何使用 where 子句限制動態數據屏蔽?
我有興趣在表中的行子集上使用 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’
它不會返回任何行。