我是否可以授予数据库用户在架构中创建视图的权限?

时间:2013-02-20 20:04:41

标签: sql-server sql-server-2008

我想设置一个安全情况,我的数据库用户(“ApplicationUser”)有权在架构中创建,更改和删除视图。

如果我执行声明

GRANT ALTER ON SCHEMA :: MySchema TO ApplicationUser;

然后连接到数据库并执行语句:

CREATE VIEW [MySchema].[MyView] AS SELECT * FROM SomeTable

我收到错误消息

CREATE VIEW permission denied in database 'MyDatabase'.

是否可以按照我想要的方式配置安全性,还是必须在整个数据库中授予“ALTER”?或其他什么?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

create schema myschema authorization ApplicationUser
GO

grant create view to ApplicationUser
GO

要做到这一点,您需要更改架构的授权,这可能会产生其他后果,或者使用像数据库DDL触发器这样的东西。

对于现有架构,请执行以下操作:

alter authorization on schema::myschema to ApplicationUser

就像我说的那样,这种方式应该谨慎行事。换句话说http://msdn.microsoft.com/en-us/library/ms186406(v=sql.105).aspx

答案 1 :(得分:0)

我能够通过...做到这一点

  1. 向数据库授予角色的创建视图/选择权限
  2. 为我想拥有视图的架构授予对该角色的更改权限
  3. 拒绝拒绝我不想拥有视图的架构对该角色的权限

这是我的语法...

USE [database];
CREATE ROLE [role];
GRANT SELECT TO [role];
GRANT CREATE VIEW TO [role];
GRANT ALTER ON SCHEMA::[schema 1] TO [role];
DENY ALTER ON SCHEMA::[schema 2] TO [role];

--TEST 
/*
EXECUTE AS USER = '[user w/role]';
CREATE VIEW [schema 1].test AS (select 'test' as 'test');
DROP VIEW [schema 1].test
CREATE VIEW [schema 2].test AS (SELECT 'test' AS 'test');
DROP VIEW [schema 2].test 
REVERT
*/