Ho ricevuto una mail da uno dei partecipanti ad un mio corso su SQL Server 2005 che mi chiedeva:
"...vogliamo dare ad un gruppo di utenti l'abilitazione su un DB di poter creare (e droppare) solo e soltanto VIEW. Abbiamo assegnato a questo gruppo la grant CREATE VIEW, ma quando si cercava di creare una vista SQL restituiva il seguente errore: "The specified schema name "dbo" either does not exist or you do not have permission to use it". A questo punto abbiamo assegnato al gruppo la permission di ALTER sullo SCHEMA dbo e così ha funzionato, ma oltre a creare le viste il gruppo poteva anche modificare le tabelle a addirittura cancellarle."
Effettivamente per poter creare una vista sono necessari entrambi i permessi: il CREATE VIEW per poter creare oggetti (si tratta quindi di un permesso a livello di database) e l'ALTER SCHEMA per poter modificare uno schema aggiungendovi degli oggetti (ma questo significa anche essere in grado di eliminare gli oggetti dello schema e ciò contrasta con la nostra esigenza).
Per trovare una via d'uscita dobbiamo fare un upgrade anche del nostro modo di pensare e solo ragionando in "SQL Server 2005 mode" possiamo concludere che ciò che ci serve è un "contenitore virtuale all'interno del quale poter creare i nostri oggetti, essere in grado di rimuoverli e, al tempo stesso, non poter fare altrettanto sugli altri oggetti di database". Ovvero uno SCHEMA, un contenitore logico di oggetti di database su cui poter assegnare dei permessi. Nell'esempio che segue viene fornito lo script per eseguire il test
USE master;
CREATE DATABASE MyDB;
CREATE LOGIN MyTest WITH PASSWORD = 'MyTest123';
GO
USE MyDB;
CREATE ROLE MyRole;
CREATE USER MyTest FOR LOGIN MyTest;
EXEC sp_addrolemember MyRole, MyTest;
GO
CREATE SCHEMA Private AUTHORIZATION MyRole;
GO
CREATE VIEW dbo.V1
AS
SELECT GETDATE() as data
GO
GRANT CREATE VIEW TO MyTest
GO
EXECUTE AS USER = 'MyTest'
GO
CREATE VIEW Private.V1
AS
SELECT GETDATE() as data
GO
DROP VIEW Private.V1
GO
DROP VIEW dbo.V1
GO
REVERT
GO
USE master;
DROP DATABASE MyDB;
DROP LOGIN MyTest;
GO
Come si può vedere l'utente MyTest è in grado di creare ed eliminare viste nello schema appartenente al ruolo di cui fa parte (MyRole) ma non può fare altrettanto sugli oggetti presenti negli altri schema salvo esplicite autorizzazioni.
Bye
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Tempo di commiati, il 4 giugno 2007 alle 15:04
- White paper su vardecimal storage format, il 30 maggio 2007 alle 10:49
- Tools per SQL Server, il 24 maggio 2007 alle 08:34
- Serie di articoli su SSIS, il 17 maggio 2007 alle 08:32
- Non c'è pace per il SP2, il 4 maggio 2007 alle 09:39
- Recuperare informazioni sugli indici, il 29 aprile 2007 alle 19:04