Чи можна надати 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

ГРАНТ

Дозволи на базу даних

Відповіді:


12

Відповідно до довідки SQL Server 2008:

Потрібен дозвіл CREATE TABLE в базі даних та дозвіл ALTER на схемі, в якій створюється таблиця.

Я просто перевірив це, використовуючи EXECUTE AS в тестовій базі даних, і мені вдалося створити таблицю в схемі, яка мала дозвіл ALTER, але не в схемі dbo (на яку я не надав дозвіл ALTER). Отже, поки ви не отримали надто ліберального характеру з дозволом ALTER на схемах, це має бути способом зробити це.


1
Так, я зараз це бачу. Незважаючи на те, що користувач має дозвіл на рівні бази даних "СТВОРИТИ ТАБЛИЦЮ", він не в змозі створити таблиці в схемах, де не було надано іншого дозволу.
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, дозволу рівня "СТВОРИТИ ТАБЛИЦЮ" рівня бази даних недостатньо, щоб дозволити користувачеві створювати таблицю, якщо вони не мають інших дозволів на схемі.
RyanW

0

Звичайно, ти можеш. Якщо у вас є user1, тоді також визначте його схему за замовчуванням як user1. Надайте цьому користувачу CREATE TABLE в дозволах бази даних. Це воно. user1 може створювати таблиці лише в схемі user1.

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