允许用户在自己的架构中执行任何操作,但不能创建或删除架构本身


12

我已经在SQL Azure中创建了一个架构,并授予了数据库角色以下权限:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, CONTROL, DELETE, EXECUTE, INSERT, REFERENCES, SELECT, UPDATE, VIEW 
DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

通过上面定义的权限myuser可以创建/删除他自己的架构,因此为了解决该问题,我尝试了ALTER ANY SCHEMA权限。但是此权限也拒绝用户创建/删除表。

为了允许用户在自己的架构中执行任何操作但不能创建或删除架构本身,需要什么权限?

Answers:


8

无需授予CONTROL该模式。
所需的权限DROP SCHEMACONTROL在架构上还是ALTER ANY SCHEMA在数据库级别,这就是为什么您的用户能够删除架构的原因。删除这两个权限将阻止与角色相关的用户创建和删除架构(当然,除非他们具有更高级别的权限)。

所需的权限CREATE ALTERDROP其它的目的是CREATE为具有组合的对象类型(表\程序\功能\视图)允许ALTER在架构权限。
您的脚本中已经具有这些权限,因此您所要做的就是删除该CONTROL权限。作为参考,这是BOLDDL语句列表,您可以在其中找到所有对象类型的必需权限。

对于懒惰者,这是删除不必要的权限后的代码:

CREATE ROLE myrole AUTHORIZATION dbo;
EXEC sp_addrolemember 'myrole', 'myuser';

CREATE SCHEMA myschema AUTHORIZATION dbo;

GRANT ALTER, DELETE, EXECUTE, INSERT, REFERENCES, SELECT,
          UPDATE, VIEW DEFINITION ON SCHEMA::myschema TO myrole;

GRANT CREATE TABLE, CREATE PROCEDURE, CREATE FUNCTION, CREATE VIEW TO myrole;

但是用户也可以在其他模式下创建对象吗?
u23432534

4

请注意,由于新模式具有“ dbo”的授权,因此用户将能够间接访问dbo拥有该模式的所有数据库对象。

例:

select * from dbo.test; --fails

create view myschema.test
as 
select * 
from dbo.test; --view is created

select * from myschema.test;  --contents of dbo.test now revealed.

这是SQL Server引擎的正确操作。权限会渗透到具有相同授权的其他架构中。为了限制这种访问,以下是创建模式的选项:

CREATE SCHEMA myschema AUTHORIZATION myrole;

这是非常好的一点-模式的所有者对于用户拥有的权限至关重要。
哥斯达黎加
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.