Назад | Перейти на главную страницу

Можно ли в SQL Server (2008) предоставить разрешение на создание таблицы в схеме?

Работая с безопасностью в 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.