一个权限的设置,你会混淆么

实验环境;

1 创建一个schema

ContractedBlock.gif ExpandedBlockStart.gif Schema
CREATE SCHEMA [Sales] AUTHORIZATION [dbo]

 

2 创建两个表,一个视图,一个存储过程

ContractedBlock.gif ExpandedBlockStart.gif [Sales].[Customer]
CREATE TABLE [Sales].[Customer](
    
[Customer_ID] [int] NOT NULL,
    
[Customer_Name] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
 
CONSTRAINT [PK_Sales.Customer] PRIMARY KEY CLUSTERED 
(
    
[Customer_ID] ASC
)
WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]
ON [PRIMARY]
ContractedBlock.gif ExpandedBlockStart.gif [Sales].[CustomerContacts]
CREATE TABLE [Sales].[CustomerContacts](
    
[Customer_ID] [int] NOT NULL,
    
[Customer_Address] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
ON [PRIMARY]

GO

ALTER TABLE [Sales].[CustomerContacts]  WITH CHECK ADD  CONSTRAINT [FK_CustomerContacts_Customer] FOREIGN KEY([Customer_ID])
REFERENCES [Sales].[Customer] ([Customer_ID])
ContractedBlock.gif ExpandedBlockStart.gif [Sales].[ContactList]
CREATE VIEW [Sales].[ContactList]
AS
SELECT     Sales.Customer.Customer_ID, Sales.Customer.Customer_Name, Sales.CustomerContacts.Customer_Address
FROM         Sales.Customer INNER JOIN
                      Sales.CustomerContacts 
ON Sales.Customer.Customer_ID = Sales.CustomerContacts.Customer_ID
ContractedBlock.gif ExpandedBlockStart.gif [Sales].[GetContact]
CREATE PROCEDURE [Sales].[GetContact]
AS
BEGIN
    
-- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    
-- Insert statements for procedure here
    SELECT * from Sales.ContactList
END

 

3 创建一个login

ContractedBlock.gif ExpandedBlockStart.gif Login
CREATE LOGIN [SaleA] WITH PASSWORD=N'password', DEFAULT_DATABASE=[MyDB], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

 

这个时候使用SaleA登录MyDB是没有任何权限的。执行下列命令会得到4个错误

ContractedBlock.gif ExpandedBlockStart.gif T-SQL
select * from Sales.Customer
select * from Sales.CustomerContacts
select * from Sales.ContactList
exec Sales.GetContact

错误信息:
Msg 229, Level 14, State 5, Line 1
SELECT permission denied on object 'Customer', database 'MyDB', schema 'Sales'.
Msg 229, Level 14, State 5, Line 2
SELECT permission denied on object 'CustomerContacts', database 'MyDB', schema 'Sales'.
Msg 229, Level 14, State 5, Line 3
SELECT permission denied on object 'ContactList', database 'MyDB', schema 'Sales'.
Msg 229, Level 14, State 5, Procedure GetContact, Line 1
EXECUTE permission denied on object 'GetContact', database 'MyDB', schema 'Sales'.

但是你如果赋予SaleA执行存贮过程的权限,你就可以得到访问到sp所对应的视图,视图所对应的表的内容了。

我开始是以为SaleA的权限应该包含试图的select权限的。唉,真是实践一下,才能知道不是这个样子的。

这样的设计应该是为了了管理的方便,如果需要级联权限,肯定会晕掉的,这样的简洁明了的方式之值得我们学习和应用到其他的设计中去的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值