SQL Server - предоставление разрешений всей схеме против объекта?

25

Я очень зелен, когда дело доходит до мира управления разрешениями баз данных в SQL Sever.

Давайте оставим пример простым.

Допустим, учетная запись «admin» является владельцем схем A, B и C.

Есть еще одна учетная запись «миньон», для которой вы хотите иметь полные права (обновить / удалить / вставить / выбрать / изменить) для любого объекта (таблицы / представления), созданного по схемам A, B и C.

Это возможно? Или вам нужно выполнять оператор предоставления каждый раз, когда вы добавляете таблицу / представление под этими схемами? (кажется немного глупым для меня).

user45867
источник

Ответы:

36

Вы можете использовать GRANTразрешения схемы, действующие для всего существующего и всего, что будет существовать в этой схеме.

Предоставить разрешения для схемы

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;

В дополнение к этому, если вы хотите затем запретить разрешения для определенного объекта в этой схеме, вы можете сделать это.

Отказ в разрешении объекта

DENY INSERT ON OBJECT::<schema>.<object> TO <user>;
Марк Синкинсон
источник
1
Также используйте квадратные скобки, если схема или имя пользователя содержат специальные символы. Например.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]
Джошуа Даксбери
Не работает в Azure, есть идеи почему? (команды работают, но SSMS подходит и говорит: «Вы не владелец БД ... бла-бла-бла. Возможно, вам не удастся сохранить таблицу» и, конечно же, вы не можете (сделал Grant ALL для базы данных (показывает разрешения «База данных», «<имя_базы>», TheUserId, «Создать таблицу» и state_desc из «GRANT»). Есть ли какая-то другая магия, которая необходима? Или Azure может использоваться только Dbo?
Traderhut Games
13

Чтобы еще немного упростить, вы можете использовать роли для выполнения той работы, которую вы ищете.

После того, как вы назначите разрешения для роли, вы можете просто добавить пользователей в роль. Таким образом, вам не нужно управлять разрешениями для отдельных пользователей. Пользователи наследуют разрешения, предоставленные роли.

Ниже приведен пример, с которого можно начать:

 -- Create the database role
CREATE ROLE TableSelector AUTHORIZATION [dbo]
GO
 ---- Grant access rights to a specific schema in the database
GRANT 
      SELECT, INSERT, UPDATE, DELETE, ALTER 

ON SCHEMA::dbo
      TO TableSelector 
GO

-- Add an existing user to the new role created 
EXEC sp_addrolemember 'TableSelector', 'MyDBUser'
GO

-- Revoke access rights on a schema from a role 
DENY ALTER  -- you can customize here ...
ON SCHEMA::dbo
      TO TableSelector 
Кин Шах
источник