4

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

如果我执行语句

GRANT ALTER ON SCHEMA :: MySchema TO ApplicationUser;

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

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

我收到错误消息

CREATE VIEW permission denied in database 'MyDatabase'.

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

谢谢你的帮助!

4

2 回答 2

8
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

于 2013-02-20T20:14:15.743 回答
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
*/
于 2020-09-23T15:20:12.377 回答