视图选项

ECNRYPTION:对生成的视图进行加密

SCHEMABINDING:将视图与基表的构架进行绑定,如果进行了绑定,对任何关于基表结构的修改会报错.

CHECK Option:当对视图进行修改操作时,当修改的行是当前视图中使用的行时,将不允许修改

A :


use northwind
go  
if object_id('dbo.VcustswithOrders') is not null
drop view dbo.VcustsWithOrders;
Go
create view dbo.VcustsWithOrders with encryption , schemabinding
as
select CustomerID, CompanyName,ContactName,Contacttitle,[Address],City,Region,PostalCode,Country,Phone,
fax
from dbo.Customers as C
where Exists (select 1 from dbo.Orders as O where O.CUstomerID=C.CustomerID);
GO


B:exec sp_helptext 'dbo.VcustsWithOrders';

执行B 返回:对象 'dbo.VcustsWithOrders' 的文本已加密。

C:alter table dbo.Customers drop column [address];

执行C 返回:

消息 5074,级别 16,状态 1,第 1 行
对象'VcustsWithOrders' 依赖于 列'address'。
消息 4922,级别 16,状态 9,第 1 行
由于一个或多个对象访问此列,ALTER TABLE DROP COLUMN address 失败。

-----------------------------------------------------------------------------------------------------------------------

CheckOption

A:

alter view dbo.VcustswithOrders with encryption , schemabinding
as
select customerID, CompanyName,ContactName,ContactTitle,
address, city,Region,PostalCode,Country,Phone, fax
from dbo.Customers as c
where exists(
select 1 from dbo.Orders as o
where o.CustomerID=C.CustomerId
) with check option;
B:

insert into dbo.Vcustswithorders(CustomerId,companyName)
values(N'FGHIJ',N'Company FGHIJ');

当执行B语句时,会得到如下错误:

消息 550,级别 16,状态 1,第 1 行
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。
语句已终止。


VIEW_METADATA

该选项的作用是,让视图看起来更像一个真正的表。不使用该选项,返回给客户端的api的元数据将是视图所依赖的基础表的数据;

如果客户端希望SqlServer发送视图的元数据信息,而不是基础表的元数据时,可以在创建或修改视图时指定此选项;是不是听的很费劲,听我慢慢说;

假设用户拥有对视图的操作权限,而没有对基础表操作的权限,那么用户对视图执行一些操作,如果指定了VIEW_METADATA选项,那么该语句将会违背安全而失败,因为只要指定了VIEW_METADATA那么返回给客户端就是视图的元数据,而不是基础表的元数据。另一方面,如果用户尝试通过视图修改数据,而该操作又与视图上定义的CHECK OPTION有冲突,这种操作只有直接提交到基础表,才有可能成功。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值