Разрешить пользователю делать что-либо в пределах его собственной схемы, но не создавать и не удалять саму схему

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. Но это разрешение также запрещает пользователю создавать / удалять таблицы.

Какие разрешения необходимы для того, чтобы пользователь мог что-либо делать в своей собственной схеме, но не мог создавать или удалять саму схему?

user960567
источник

Ответы:

8

Нет необходимости предоставлять CONTROLна схеме.
Требуемое разрешение DROP SCHEMAнаходится либо CONTROLна схеме, либо ALTER ANY SCHEMAна уровне базы данных, и поэтому ваш пользователь смог удалить схему. Удаление этих двух разрешений не позволит пользователям, связанным с ролями, создавать и удалять схему (если, конечно, у них нет разрешений более высокого уровня).

Требуемое разрешение CREATE ALTERи DROPдругие объекты , является CREATEразрешение на тип объекта (таблица \ процедура \ функции \ вид) в сочетании с ALTERразрешением на схеме.
У вас уже есть эти разрешения в вашем скрипте, поэтому все, что вам нужно сделать, это удалить CONTROLразрешение. Для справки приведем список DDLоператоров BOL, в которых вы можете найти необходимые разрешения для всех типов объектов.

Для ленивых вот ваш код после удаления ненужного разрешения:

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;
Джонатан Мирс
источник
Это очень хороший момент - владелец схемы имеет решающее значение для прав пользователя.
Коста