mssql sqlserver 对特定用户设置视图的访问权限的方法分享


摘要:
最近我们公司需要给别的厂家开通一个指定视图的查询权限,需禁用其它的权限,下文将具体的操作方法记录如下,方便后续遇到同样的情况进行相关处理。
实验环境:sql server 2008 R2


下面我们将采用创建表、创建视图、创建登陆名、视图访问授权已经完成“用户对视图的只读访问设置”。


---创建测试数据表及指定视图 
USE tempdb
GO
CREATE TABLE [maomao365](
	keyId INT IDENTITY(1,1) PRIMARY KEY,
	info nvarchar(30)	
)
GO
 
insert into [maomao365](info)values
('sql blog'),(@'sql教程'),(@'视图权限指定')

GO

IF OBJECT_ID('dbo.vw_ maomao365') IS NOT NULL
DROP VIEW dbo.vw_ maomao365
GO
CREATE VIEW dbo.vw_ maomao365
AS
SELECT * FROM  [maomao365]  
GO
-------------- 表及视图创建End ----------------
 
--2. 创建登录名
USE [master]
GO
IF EXISTS(SELECT * FROM sys.syslogins AS s WHERE NAME='user_vw_readOnly')
BEGIN
	DROP LOGIN [user_vw_readOnly]	
END
GO
CREATE LOGIN user_vw_readOnly WITH PASSWORD=N'123456', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
 
--2. 进入需要授权的库,创建用户名并授权
USE tempdb
GO
IF EXISTS(SELECT 1 FROM sys.database_principals WHERE NAME='user_vw_readOnly' AND type_desc='SQL_USER')
	DROP USER user_vw_readOnly
GO
CREATE USER user_vw_readOnly FOR LOGIN user_vw_readOnly
GO
GRANT SELECT ON dbo.vw_ maomao365 TO user_vw_readOnly 
 
 
--------------------- 用 testUser 用户登录之后 -----------------------
USE [tempdb]
GO
SELECT keyId,info
FROM [maomao365]
/*
消息 229,级别 14,状态 5,第 4 行
拒绝了对对象 'maomao365' (数据库 'tempdb',架构 'dbo')的 SELECT 权限。
*/

SELECT keyId,info  FROM [dbo].[vw_ maomao365]