我想设置一个安全情况,我的数据库用户(“ApplicationUser”)有权在架构中创建,更改和删除视图。
如果我执行声明
GRANT ALTER ON SCHEMA :: MySchema TO ApplicationUser;
然后连接到数据库并执行语句:
CREATE VIEW [MySchema].[MyView] AS SELECT * FROM SomeTable
我收到错误消息
CREATE VIEW permission denied in database 'MyDatabase'.
是否可以按照我想要的方式配置安全性,还是必须在整个数据库中授予“ALTER”?或其他什么?
感谢您的帮助!
答案 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)
我能够通过...做到这一点
这是我的语法...
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
*/