
```sql
---------------------------------------------创建视图----------------------------------------------
if exists (select * from sysobjects where name = 'OA_MATERIAL')
drop view OA_MATERIAL
go
--创建视图
create view OA_MATERIAL
as
select * from T_BD_MATERIAL
go
--使用视图--
select *from OA_MATERIAL
-- 查看视图创建语句--
sp_helptext 'OA_MATERIAL'
----------------------------------------------SqlServer 创建用户给用户查看视图的权限-----------------------------------------------
--给当前数据库创建角色;
exec sp_addrole 'db_oaview' --创建了一个数据库角色,名称为:[db_oaview] db_oaview是角色名称
--给角色名授权访问的视图;
GRANT SELECT ON OA_MATERIAL TO db_oaview
--给角色取消授权;
REVOKE SELECT ON OA_MATERIAL TO db_oaview
--给角色禁止权限;可以配合最后的查询查询观察,执行后会新增 PROTECTYPE = DENY的行,可以先赋予全部查询权限,再用deny否定这个权限,否定后可以再用grant重新给予权限。
DENY SELECT, INSERT, UPDATE, DELETE ON dbo.T_BD_MATERIAL TO db_oaview
--添加登录名,并指定默认数据中心
exec sp_addlogin 'OA','XXXX','XXXX' --exec sp_addlogin '登录名','登录密码','数据库名称'
--设置用户名 = 登录名 添加角色db_oaview到用户
exec sp_adduser 'OA','OA','db_oaview' --exec sp_adduser '登录名','用户名','角色'
-- 给用户添加 查询角色db_datareader,默认可以查询系统所有表
EXEC sp_addrolemember 'db_datareader', 'OA'
-- 移除用户 角色
EXEC sp_droprolemember 'db_datareader', 'OA'
-- c查询用户拥有的所有角色
EXEC sp_helpuser 'OA';
-- 查询所有grant的权限,deny的好像没反应
select c.name a