Archive for the ‘Sql Server’ Category

Recuperare l’ownership della propria istanza Sql Server Express 2008

mercoledì, dicembre 14th, 2011

 

Cercando documentazione relativa al maintenance mode di Sql Server mi sono imbattuto in questo shell script (http://code.msdn.microsoft.com/addselftosqlsysadmin/) che permette di assegnare i privilegi di sysadmin sull’istanza locale di Sql Server Express all’utente con cui ci si è loggati sul proprio OS (o ad un qualsiasi altro specificato come parametro); per farlo, ovviamente, l’utente in oggetto dovrà far parte del gruppo “Administrators” locale.

 

Uno degli scenari dove questo script è particolarmente utile è il seguente:

 

quando sql server express viene installato da uno specifico utente, un secondo utente che proverà ad utilizzare il servizio, godendo dei soli privilegi minimi, non potrà creare database, tabelle o altre tipologie di oggetti. Questo accade perchè l’utente owner dell’installazione è il solo a cui è garantito il ruolo da sysadmin, ergo, il secondo utente pur facendo parte del gruppo degli amministratori del sistema operativo non potrà in alcun modo gestire l’istanza locale del rdbms light di Microsoft. Il problema diventa ancor più grave quando l’utente che ha effettuato l’installazione viene per qualsiasi motivo eliminato dal sistema non potento, quindi, utilizzarlo per poter riassegnare manualmente ad altri utenti il ruolo da sysadmin.

 

Ai tempi di Sql Server Express 2005, Microsoft aveva deciso di garantire il ruolo da sysadmin a tutto il gruppo degli amministratori locali del OS permettendo, quindi, agli utenti di avere l’ownership dell’istanza in maniera praticamente trasparente. Putroppo, con l’introduzione del UAC su Windows Vista questa decisione ha introdotto problemi di usabilità generale ad esempio su Visual Studio. L’UAC, per sua natura, nascondendo il token di sicurezza da “Adminsitrator” al processo di Visual Studio non permetteva la gestione completa del server DB direttamente dalla GUI del IDE Microsoft: l’utente era quindi costretto a lanciare VS in “elevated mode” (per inciso col “Run as Administrator”) che è generalmente una pratica non consigliabile.

 

Lo script automatizza i seguenti steps:

 

    1. restart del servizio SQL Server con l’ozione –m (maintenance mode) che permette una singola connessione da un admin box (aggiunto automaticamente ed in maniera temporanea al ruolo sysadmin del server);
    2. connessione all’istanza SQL e aggiunta dell’utente specificato al ruolo sysadmin;
    3. restart del servizio SQL in modalità standard;

 

.. perfetto per “riguadagnare” la proprietà Winking smile del proprio server in pochissimi secondi.

Tags: , , , , , ,
Posted in IT Pro, Microsoft, Sql Server, Tools | No Comments »

MS SQL Server : una procedura per il reseed dei campi identity

giovedì, aprile 26th, 2007

I campi con numeri progressivi autogenerati sono gestiti diversamente al variare del database server utilizzato.

Chi utilizza Oracle come RDBMS sa che esiste il concetto di sequence che altro non è che un oggetto che il server utilizza per generare una sequenza di numeri progressivi utili per assegnare valori automatici alle primary keys.

Capita, soprattutto in fase di sviluppo o di testing di stored procedure o in generale quando effettuiamo delle INSERT\DELETE di prova, che si abbia la necessità di dover resettare la sequence e riportarla al valore 0 in modo che, al successivo INSERT su quella tabella, la PK sia appunto contrassegnata da valore 0.

Su Oracle basta andare in editing sulla specifica sequence relativa al campo che ci interessa e settarla a 0.

Sql Server di Microsoft, per poter svolgere il medesimo compito, utilizza il concetto di autoincremented identity : uno status con cui viene contrassegnata la colonna specifica che vogliamo valorizzare con un numero sequenziale autogenerato.

Il reset delle identities su Sql Server avviene effettuando un’operazione chiamata Reseed.

Ieri, avendo la necessità di dover lanciare il reseed per un gran numero di identities associate ad altrettante PK, ho deciso di scrivere una piccola stored procedure che effettuasse questa operazione in modo automatico, ciclando sull’intero set di tabelle tramite un cursore.

Ecco il codice T-SQL :

CREATE PROCEDURE [dbo].[ReseedAllTables]
	@tbl_pattern nvarchar(50),
	@reseed_number int
AS
BEGIN
	DECLARE cursore Cursor for select [name] from sys.tables where [name] like @tbl_pattern;
	OPEN cursore;
	DECLARE @nome nvarchar(50);
	fetch next from cursore into @nome;
	while(@@fetch_status <> -1)
	begin
	dbcc checkident(@nome,RESEED,@reseed_number);
	fetch next from cursore into @nome;
	end
	close cursore;
	deallocate cursore;
	SET NOCOUNT ON;

END

Dal codice si può notare come la procedura sia parametrizzata.

@tbl_pattern : è un pattern di espressione like che può essere utilizzato per applicare un filtro sul nome delle tabelle su cui effettuare l’operazione di reseed.

Esempio : supponiamo che le tabelle del db siano nominate utilizzando un suffisso come ‘tbl_’ (tbl_Customers, tbl_Orders, etc), il parametro @tbl_pattern sarà tbl_%.

@reseed_number : rappresenta il numero intero a cui riportare l’identity (0 nel caso vogliamo resettare completamente la sequenza).

 

Magari può essere utile a qualcuno.

Posted in Sql Server | No Comments »

Sql Server 2005, Debug di stored procedure su server remoto.

lunedì, novembre 6th, 2006

Se il database server che utilizzate risiede fisicamente su una macchina diversa da quella di sviluppo e volete utilizzare la feature di Visual Studio 2005 che permette di fare debug delle stored procedure T-SQL (quindi valutazione di espressioni al volo, controllo variabili, step into, step over, etc.) c’è bisogno di un particolare requisito.
L’utente che effettua la connessione al database (quello settato nella connection string dell’Esplora Server di Visual Studio) deve avere, ovviamente, credenziali valide per la connessione al db, ma deve inoltre appartenere al gruppo Administrators della macchina su cui è montato Sql Server altrimenti non avrà accesso all’esecuzione di sp_enable_sql_debug non permettendo, quindi, di attivare il debugger.
Maggiori informazioni sull’errore (Error: User Could Not Execute Stored Procedure sp_enable_sql_debug) disponibili su MSDN .

Posted in Sql Server | No Comments »