giugno 2008 - Posts

Owner, Schema e Permessi su Aruba

 

Da un paio di giorni è in corso nel newsgroup microsoft.public.it.sql una discussione che ha come argomento la confusione esistente tra i concetti di owner, schema e permessi.

Cercando di riassumere c'è un utente che ha disegnato una base dati all'interno della quale ci sono delle viste e stored procedure che richiamano altri oggetti referenziandoli, come da best practice, anteponendo il nome dello schema al nome dell'oggetto. Questo utente ha stipulato un contratto con un noto fornitore di servizi (Aruba) che ospiterà il suo database sui propri server. Prassi consolidata di questo fornitore è quella di definire un login per l'accesso ai dati e creare, nel database dell'utente, uno schema in cui vengono creati gli oggetti che compongono il database.

In questo modo non solo viene limitata la possibilità di definire altri schema per meglio separare fra loro diverse tipologie di oggetti e/o per utilizzare gli stessi come securables, ma ogni oggetto che ne referenzia un altro smette di funzionare fino a che non vengono resi coerenti gli oggetti referenziati che adesso appartengono ad uno schema differente rispetto al momento della creazione.

Questo utente ha deciso quindi di scrivere ad Aruba, spinto anche dalla discussione scaturita nel newsgroup, chiedendo lumi sulle ragioni di una scelta tanto singolare che non solo limita le possibilità offerte dal prodotto SQL Server (non posso suddividere i miei oggetti in contenitori logici), ma crea anche disagi ai propri clienti che, se vogliono seguire le best practice in tema di "two part name" per tutti gli oggetti di database, si vedono costretti a modificare le stored procedure, le viste, le udf e le proprie applicazioni di accesso ai dati per cambiare il nome dello schema degli oggetti.

Questa è stata la risposta di Aruba:

Gentile cliente,come specificato nel supporto tecnico per l'utilizzo del servizio

http://assistenza.aruba.it/kb/idx/81/0/00002MS_Sql_Server.html

il tipo di accesso come dbo non e' consentito agli oggetti presenti nel suo db in quanto proprietario e' l'utente che le e' stato assegnato.

Inoltre cambiando l'owner dei suoi oggetti in 'dbo' di conseguenza non risulterebbero piu' accessibili in quanto l'utenza assegnata a causa di problemi di sicurezza ha specifici permessi che non sono permessi a livello di ruolo 'owner' e non possono essere cambiati.

Sono evidenti le enormi lacune sul concetto di owner, schema e permessi che ha dimostrato l'autore di questa risposta e non può essere considerata una giustificazione neanche il fatto che fino a SQL Server 2000 il concetto di owner e quello di schema erano sovrapposti.

E' infatti facilmente verificabile che a prescindere dallo schema in cui si trova un oggetto questo può essere acceduto anche se il nome dell'utente non coincide con il nome dello schema

USE master;
GO

CREATE DATABASE ArubaTest;
CREATE LOGIN Luca WITH PASSWORD = 'qwerty12345';
GO

USE ArubaTest;
GO

CREATE SCHEMA MySchema;
GO

CREATE USER Luca FROM LOGIN Luca;
GO

CREATE TABLE MySchema.T1 (ID int NOT NULL);
GO

GRANT SELECT ON MySchema.T1 TO Luca;
GO

EXECUTE AS USER = 'Luca'
      SELECT ID FROM MySchema.T1
REVERT
GO

ALTER SCHEMA dbo TRANSFER MySchema.T1;
GO

GRANT SELECT ON dbo.T1 TO Luca;
GO
EXECUTE AS USER = 'Luca'
      SELECT ID FROM dbo.T1
REVERT
GO

La stessa query sulla tabella T1 (adesso nello schema dbo) può essere eseguita anche se lo user in questione ha un default schema differente da dbo e non viene referenziato l'oggetto con il "two part name"

ALTER USER Luca WITH DEFAULT_SCHEMA = MySchema;
GO

EXECUTE AS USER = 'Luca'
      SELECT ID FROM T1
REVERT
GO

Anche l'eventuale esigenza di creare oggetti nel database non richiede privilegi di livello dbowner. A prescindere da quale sia lo schema in cui un utente debba essere messo in grado di creare degli oggetti, l'esigenza può essere risolta con

GRANT ALTER ON SCHEMA::dbo TO Luca;
GRANT CREATE TABLE TO Luca;
GO

EXECUTE AS USER = 'Luca'
      CREATE TABLE dbo.T2 (ID int NOT NULL)
REVERT
GO

Mi piacerebbe che potesse intervenire qualcuno di Aruba per meglio chiarire quella che, a mio avviso, è una risposta quantomeno lacunosa...

 

 

Posted by lbianchi with 3 comment(s)

Transparent Data Encryption

L’infrastruttura di cifratura basata su PKI è stata introdotta in SQL Server 2005 (a questo link trovate un mio articolo sull'argomento). L’implementazione, tuttavia, richiede che vengano modificate le applicazioni di accesso ai dati per far uso delle funzioni necessarie per cifrare e decifrare le informazioni oltre che aprire le chiavi simmetriche utilizzate per cifrare i dati sensibili. Tutto questo ha rappresentato un ostacolo all’implementazione della cifratura dei dati che il Transparent Data Encryption (TDE) in SQL Server 2008 si propone di superare.

Con questa feature vengono cifrate le informazioni memorizzate nelle pagine dati su disco (in RAM i dati sono in chiaro) in maniera trasparente per le applicazioni di accesso ai dati. Rispetto all’infrastruttura PKI presente anche in SQL Server 2005 la TDE cifra l’intero database e non è possibile selezionare gli attributi che meritano di essere protetti rispetto a quelli meno critici.

La TDE può essere implementata insieme alla compressione dei dati. Quando la pagina è in RAM, questa viene compressa per poi essere cifrata nel momento di essere scritta su disco; quando deve essere recuperata, la pagina viene decifrata per essere posta in RAM e da qui, eventualmente, decompressa quando viene letta dall’applicazione client. Un database in cui sia abilitata la TDE si rivela poco comprimibile in occasione di un eventuale backup compresso mentre non viene pregiudicata la possibilità di compressione dei dati.

Per poter cifrare un database è necessario definire la MASTER KEY nel master; con questa MK si genera e viene protetto un certificato digitale e questo certificato rappresenterà la protezione del nostro database. Affinchè sia possibile ripristinare il database su un’altra istanza occorre che sia presente il certificato che ha cifrato il database. Diversamente non sarà possibile ripristinare o eseguire l’attach del database.

La TDE, al pari della data compression, è utilizzabile con il database mirroring. Il traffico di mirroring non è automaticamente cifrato (la cifratura riguarda solo le pagine dati su disco). Per cifrare il traffico si utilizza la cifratura a livello di ENDPOINT.

Nella pagina contenente il materiale del workshop UGISS tenutosi a Roma lo scorso mese di maggio trovate, nelle demo, degli esempi di utilizzo della TDE; altri esempi li potete trovare in questo post e in quest'altro.

Posted by lbianchi with no comments
Filed under: ,

[SQL Server 2008 Data Compression]: Che cosa comprimere?

Allo scorso workshop UGISS di Roma (qui sono disponibili le slide e le demo) ho parlato, tra le altre cose, di compressione dei dati.

La compressione dei dati, come noto, è una funzionalità in grado di far risparmiare risorse in termini di IO e, conseguentemente, permette un utilizzo più efficiente della RAM. Tutto questo viene pagato con qualche punto percentuale di CPU soprattutto abilitando la compressione a livello di pagina. In circostanze tutt'altro che rare, come ho dimostrato nel workshop tenutosi a Roma, la minor quantità di pagine a cui dover accedere contribuisce anche a ridurre l'utilizzo della CPU e, quindi, l'efficenza generale del sistema sotto tutti i punti di vista.

Chi ha avuto modo di giocare con la data compression in SQL Server 2008 avrà certamente utilizzato la sp_estimate_data_compression_savings che permette di conoscere, per ciascuna tabella o indice, una stima sul fattore di compressione atteso. Paul Nielsen ha creato due stored procedure molto utili in tema di compressione. Con la prima (db_compression_estimate) vengono analizzate tutte le tabelle e tutti gli indici di un database ed un report suggerisce il livello di compressione migliore (row o page). Con la seconda (db_compression) vengono compresse tutte le pagine e tutti gli indici dove le stime precedenti indicano un risparmio di spazio pari o superiore ad una determinata soglia passata come argomento.

Senz'altro molto utili... Stick out tongue

Posted by lbianchi with no comments

Individuare gli indici duplicati o sovrapposti

Come tutti sappiamo una corretta strategia di indicizzazione è uno dei pilastri più importanti nell'implementazione di un database. Non dobbiamo esagerare, almeno in un database OLTP (in un datawarehouse diventa ammissibile "esagerare" un tantino), definendo troppi indici e, soprattutto, dovremmo verificare regolarmente che gli indici che abbiamo creato siano effettivamente utilizzati ed in questo ci viene in aiuto la sys.dm_db_index_usage_stats.

Talvolta però capita di individuare 2 indici che si sovrappongono fra loro dove uno dei 2 rappresenta un subset dell'altro. Lo script riportato in questo post ci evidenzia tutte le coppie di indici sovrapposti fra loro all'interno di un database. Una volta individuate le diverse coppie, quale eliminare per ciascuna coppia... quello che ha più chiavi di indice (meno compatto quindi meno efficiente) o quello meno "specifico"? Dipende. Come noto l'efficienza di un indice è data in primo luogo dalla compattezza della sua chiave (oltre ovviamente alla selettività); non dobbiamo scordarci, però, che un indice con qualche attributo in più nella definizione della sua chiave può rappresentare un indice di copertura per talune query. Non esiste quindi una regola generale da seguire e la valutazione va fatta caso per caso ricordandosi che, in SQL Server 2005, esiste la clausola INCLUDE che permette di rimuovere degli attributi "secondari" di un indice (non clustered) dalla definizione della chiave e memorizzarli solo nel livello foglia salvaguardando sia la compattezza dell'indice (meno livelli b-tree per andare dalla root al livello foglia) che la possibilità di utilizzare questo indice come indice di copertura per determinate query.

 

Posted by lbianchi with no comments
Filed under:

Cumulative update package... 8? No... 9!

Solo ieri Davide annunciava il rilascio del Cumulative Update Package 8 che oggi già viene annunciato il 9... Tongue Tied

 

Posted by lbianchi with no comments
Filed under:

E se succedesse a voi...?

In questi giorni sulla rete si sta discutendo sulla chiusura improvvisa di ITHost.ch.

Per chi non fosse al corrente della cosa, questa società forniva servizi di hosting/housing a molte aziende italiane. Improvvisamente, e senza il minimo preavviso, tutti i siti ospitati sui server di ITHost.ch sono divenuti irraggiungibili (tra questi il sito di Aspitalia.com) in quanto il fornitore di connettività di ITHost ha deciso di chiudere i rubinetti per via delle numerose fatture non pagate da ITHost stessa. I bene informati hanno indagato e sembra che ITHost.ch sia stata dichiarata fallita nel corso del 2006 e ad oggi i responsabili dell'azienda si sono resi irreperibili.

Facile immaginare il "risentimento" di chi ha affidato il proprio dominio ad una società che poteva vantare numerose referenze, sia tecniche che commerciali, ed oggi si trova nell'impossibilità, anche volendo trasferire il proprio dominio altrove, di poter avere i propri dati; in taluni casi anche il dominio risulta essere "bloccato" da ITHost.ch.

A queste persone va ovviamente tutta la mia solidarietà, ma la ragione di questo post non è per esprimere il mio appoggio (peraltro soltanto morale) a chi non può disporre dei propri dati ne tantomeno schierarmi da una parte o dall'altra. Vorrei però che tutti quanti leggeranno questo post si pongano il dubbio se sarebbero stati in grado, qualora l'episodio li avesse riguardati in prima persona, di far sopravvivere la propria azienda o il proprio sito con il minor disagio possibile.

Sicuramente tutti i clienti di ITHost.ch avevano concordato con lo stesso le politiche di backup dei dati ma evidentemente il "buco" è nella conservazione di tali backup che, se fossero stati in possesso dei legittimi proprietari, ciò avrebbe senz'altro mitigato i danni. Quello che è successo avrà sicuramente dei risvolti legali, ma una azienda non può sottostare ai procedimenti legali per entrare (o rientrare) in possesso dei propri dati e del proprio dominio. Effetti simili potevano essere scatenati da cause naturali tipo alluvioni o terremoti e per sopravvivere ad eventi simili, anche se siamo a centinaia o migliaia di chilometri dall'epicentro, è indispensabile implementare per tempo una efficace strategia di disaster recovery.

Bye

 

Posted by lbianchi with no comments
Filed under: ,

Finalmente di nuovo online

Durante questo stop prolungato del sito di UGISS ci sono stati diversi eventi su cui avrei voluto bloggare.

C'è stato il rilascio della RC0 di SQL Server 2008, il down di un fornitore di servizi (ITHOST.ch) che ha coinvolto anche il sito di Aspitalia, si parla sempre di più di "green computing"... argomenti, tutti, sui quali avrei postato qualcosa ma non mancherà certo occasione di recuperare nei prossimi giorni. La cosa più importante è essere tornati "on air"... Smile

Bye 

 

Posted by lbianchi with no comments
Filed under: ,