Con SQL Server (2008), puoi concedere l'autorizzazione per creare una tabella all'interno di uno schema?


14

Lavorando con la sicurezza in SQL Server 2008, sto cercando di concedere a un utente le autorizzazioni CREATE TABLE, ma solo all'interno di uno schema specifico. L'autorizzazione CREATE TABLE si applica solo a livello di database?

Posso limitare l'utente a creare una tabella solo all'interno di uno schema?

Ho provato:

USE [databasename]
GRANT CONTROL ON Schema :: [schemaname] TO [username]
GO

e

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GO

Tuttavia, l'utente non è ancora in grado di creare una tabella all'interno dello schema di destinazione. Solo quando eseguo questo, l'utente può creare una tabella:

USE [databasename]
GRANT CREATE TABLE to [username]
GO

CONCEDERE

Autorizzazioni database GRANT

Risposte:


12

Secondo la guida di SQL Server 2008:

Richiede l'autorizzazione CREATE TABLE nel database e l'autorizzazione ALTER per lo schema in cui viene creata la tabella.

Ho appena provato questo usando EXECUTE AS in un database di test e sono stato in grado di creare una tabella nello schema che aveva l'autorizzazione ALTER, ma non nello schema dbo (per il quale non ho concesso l'autorizzazione ALTER). Quindi, fintanto che non sei diventato troppo liberale con l'autorizzazione ALTER per gli schemi, questo dovrebbe essere il modo di farlo.


1
Sì, lo vedo ora. Anche se l'utente dispone dell'autorizzazione "CREATE TABLE" a livello di database, non è in grado di creare tabelle negli schemi in cui non è stata concessa alcuna altra autorizzazione.
RyanW

Sembra decisamente spiacevole che tu debba concedere l'autorizzazione CREATE TABLE coperta solo per abilitare questo scenario.
MgSam,

6

Concedere l'autorizzazione per creare tabelle a un utente specifico in un database specifico non solo richiede le autorizzazioni CREATE TABLE ma richiede anche le autorizzazioni ALTER allo schema, ad esempio DBO.

USE [databasename]
GRANT ALTER ON Schema :: [schemaname] TO [username]
GRANT CREATE TABLE TO [username]
GO

Per esempio;

USE db_mydatabase
GRANT ALTER ON Schema :: DBO TO user_mydatabase
GRANT CREATE TABLE TO user_mydatabase
GO

1

Non vi è nulla in merito a tale autorizzazione nella documentazione delle autorizzazioni applicabili agli schemi nel 2008 R2: http://msdn.microsoft.com/en-us/library/ms187940.aspx

Pertanto vorrei concludere: no, non è possibile, creare una tabella può essere controllato solo a livello di database (questo sembrerebbe valere per tutti i valori mobiliari).


Grazie, sono d'accordo, non c'è nulla su quel livello. Come ha notato @ db2, l'autorizzazione "CREATE TABLE" a livello di database non è sufficiente per consentire a un utente di creare una tabella se non dispone di altre autorizzazioni per lo schema.
RyanW,

0

Certo che puoi. Se si dispone di user1, definire anche lo schema predefinito come user1. Concedere a CREATE TABLE le autorizzazioni del database per questo utente. Questo è tutto. user1 può creare solo tabelle all'interno dello schema user1.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.