Дозволити користувачеві робити що-небудь у межах своєї власної схеми, але не створювати та не скидати саму схему


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можна створити / відкинути власну схему, тож для подолання проблеми я спробував дозволити ВІДНОВЛЕННЯ СКІЇ СХЕМИ. Але цей дозвіл також забороняє користувачеві створювати / скидати таблиці.

Які дозволи потрібні для того, щоб дозволити користувачеві робити що-небудь у межах своєї власної схеми, але не мати змоги створити або скинути саму схему?

Відповіді:


8

Не потрібно надавати CONTROLсхему.
Потрібний дозвіл DROP SCHEMAзнаходиться CONTROLна схемі або ALTER ANY SCHEMAна рівні бази даних, і саме тому ваш користувач зміг скинути схему. Видалення цих двох дозволів не дозволить користувачам, що пов’язані з ролями, створювати та скасовувати схему (якщо, звичайно, вони не мають дозволів вищого рівня).

Необхідний дозвіл на CREATE ALTERта DROPінші об'єкти - це CREATEдозвіл на тип об'єкта (table \ procedure \ function \ view) у поєднанні з ALTERдозволом на схемі.
Ви вже маєте ці дозволи у своєму сценарії, тому все, що вам потрібно зробити, - це видалити CONTROLдозвіл. Для довідки, ось BOL список DDLоператорів, де ви можете знайти необхідний дозвіл для всіх типів об'єктів.

Для ледачих ось ваш код після видалення непотрібного дозволу:

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;

Це дуже хороший момент - власник схеми має вирішальне значення для дозволів, які має користувач.
Коста
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.