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

Jam*_*Orr 2 sql-server sql-server-2008

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

如果我执行该声明

GRANT ALTER ON SCHEMA :: MySchema TO ApplicationUser;
Run Code Online (Sandbox Code Playgroud)

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

CREATE VIEW [MySchema].[MyView] AS SELECT * FROM SomeTable
Run Code Online (Sandbox Code Playgroud)

我收到错误消息

CREATE VIEW permission denied in database 'MyDatabase'.
Run Code Online (Sandbox Code Playgroud)

是否可以按照我想要的方式配置安全性,还是必须在整个数据库上授予"ALTER"?或者是其他东西?

谢谢你的帮助!

muh*_*mud 6

create schema myschema authorization ApplicationUser
GO

grant create view to ApplicationUser
GO
Run Code Online (Sandbox Code Playgroud)

要做到这一点,您需要更改模式的授权,这可能会产生其他后果,或者使用类似数据库DDL触发器的东西.

对于现有架构,请执行以

alter authorization on schema::myschema to ApplicationUser
Run Code Online (Sandbox Code Playgroud)

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


小智 5

我能够做到这一点...

  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
*/
Run Code Online (Sandbox Code Playgroud)