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

14

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

ГРАНТ

Разрешения базы данных GRANT

RyanW
источник

Ответы:

12

Согласно справке по SQL Server 2008:

Требуется разрешение CREATE TABLE в базе данных и разрешение ALTER для схемы, в которой создается таблица.

Я только что проверил это, используя EXECUTE AS в тестовой базе данных, и мне удалось создать таблицу в схеме с разрешением ALTER, но не в схеме dbo (для которой я не предоставил разрешения ALTER). Так что, пока вы не стали слишком либеральными с разрешениями ALTER для схем, это должен быть способ сделать это.

db2
источник
1
Да, я вижу это сейчас. Несмотря на то, что у пользователя есть разрешение «CREATE TABLE» на уровне базы данных, он не может создавать таблицы в схемах, где никакие другие разрешения не были предоставлены.
RyanW
Определенно, к сожалению, вам нужно предоставить полное разрешение CREATE TABLE только для того, чтобы включить этот сценарий.
MgSam
6

Предоставление разрешения на создание таблиц конкретному пользователю в конкретной базе данных не только требует разрешений 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
Энди Дэвис
источник
1

В документации о разрешениях, применимых к схемам в 2008 R2, ничего нет о таком разрешении: http://msdn.microsoft.com/en-us/library/ms187940.aspx

Поэтому я бы пришел к выводу: нет, вы не можете, создание таблицы может контролироваться только на уровне базы данных (это может относиться ко всем защищаемым объектам).

Ричард
источник
Спасибо, я согласен, в этом уровне ничего нет. Однако, как заметил @ db2, разрешения уровня CREATE TABLE на уровне базы данных недостаточно, чтобы позволить пользователю создать таблицу, если у него нет других разрешений в схеме.
RyanW
0

Что вы можете. Если у вас есть user1, то определите его схему по умолчанию как user1. Предоставьте этому пользователю разрешение CREATE TABLE в базе данных. Вот и все. user1 может создавать таблицы только в схеме user1.

user78128
источник