Работая с безопасностью в SQL Server 2008, я пытаюсь предоставить пользователю разрешения CREATE TABLE, но только в рамках определенной схемы. Разрешение CREATE TABLE применяется только на уровне базы данных?
Могу ли я ограничить пользователя созданием таблицы только внутри схемы?
Я пробовал:
USE [databasename]
GRANT CONTROL ON Schema :: [schemaname] TO [username]
GO
и
USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GO
Но пользователь по-прежнему не может создать таблицу в целевой схеме. Пока я не запустил это, пользователь может создать таблицу:
USE [databasename]
GRANT CREATE TABLE to [username]
GO
Согласно справке SQL Server 2008:
Требуется разрешение CREATE TABLE в базе данных и разрешение ALTER для схемы, в которой создается таблица.
Я только что протестировал это, используя EXECUTE AS в тестовой базе данных, и мне удалось создать таблицу в схеме с разрешением ALTER, но не в схеме dbo (для которой я не предоставлял разрешение ALTER). Итак, если вы не стали слишком либеральными с разрешением ALTER для схем, это должен быть способ сделать это.
Предоставление разрешения на создание таблиц конкретному пользователю в конкретной базе данных требует не только разрешения CREATE TABLE, но также требует разрешения ALTER для схемы, например DBO.
USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GRANT CREATE TABLE TO [username]
GO
Например;
USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO
В документации разрешений, применимых к схемам в 2008 R2, нет ничего о таком разрешении: http://msdn.microsoft.com/en-us/library/ms187940.aspx
Поэтому я бы сделал вывод: нет, вы не можете, создать таблицу можно только на уровне базы данных (похоже, это применимо ко всем защищаемым объектам).
Что вы можете. Если у вас есть user1, определите также его схему по умолчанию как user1. Предоставьте этому пользователю права CREATE TABLE в базе данных. Вот и все. user1 может создавать таблицы только в схеме user1.