Welcome to Sign in | Help
in Search

Creeare/atasare baza de date

Last post 03-18-2008, 10:15 AM by aflorin27. 7 replies.
Sort Posts: Previous Next
  •  03-07-2008, 3:07 AM 4306

    Creeare/atasare baza de date

    Salut! Vreau sa fac o aplicatie care sa permita userului sa adauge/stearga baze de date intr-un Server Express 2005. Acestea sint initial identice (contin tabele cu valori introduse default si proceduri stocate, si au definit un user 'User' db_owner) si se vor particulariza ulterior.
    Am observat ca pt a putea executa din aplicatia C# "CREATE DATABASE XXX ..." trebuie ca userul folosit sa aiba setata propritatea "Server Roles' ca sysadmin. Cred ca nu e bine ca acest drept sa fie setat default si permanent, deci imi pun intrebarea daca nu ar fi mai bine sa-l setez numai inainte de a creea noua baza de date. Intrebare: care este sintaxa care imi permite setarea/desetarea rolului in runtime pt un anumit user?
    Structura interna a tabelei o pot reconstitui cu ajutorul unui script generat si rulat runtime. O alta intrebare ar fi: cum pot sa recreez in baza de date nou formata valorile care trebuie sa fie default in tabele - destul de multe ca numar de recorduri (~200 recorduri)?

    O idee mai simpla ar fi sa fac append la server a unei baze de date pe baza unor fisiere gata creeate (generate prin simpla copiere a fisierelor MDF si LDF default). In acest caz as avea automat in baza nou atasata structura si datele default! Si in acest caz am nevoie de aceeasi setare a server roles...

    Care metoda este mai 'profesionala'? Avind in vedere ca operatia nu se va executa foarte des sau de un numar mare de ori, prefer o metoda sigura, nu neaparat rapida.

    Sper ca am fost suficient de coerent pt a ma putea face inteles! Daca nu, va stau la dispozitie!
    Multumesc anticipat!

  •  03-07-2008, 5:44 AM 4309 in reply to 4306

    Re: Creeare/atasare baza de date

    1. Daca tu ii instalezi SQL Server Express, ai putea modifica DB-ul model -sa semene cu ce vrei tu.
    2. Poti pune permisiuni pe un alt user ca sa faca Create DAtabase
    "CREATE DATABASE permission defaults to members of the sysadmin and dbcreator fixed server roles. Members of the sysadmin and securityadmin fixed server roles can grant CREATE DATABASE permissions to other logins. Members of the sysadmin and dbcreator fixed server role can add other logins to the dbcreator role. The CREATE DATABASE permission must be explicitly granted; it is not granted by the GRANT ALL statement."
    Vezi
    http://msdn2.microsoft.com/en-us/library/aa258257(SQL.80).aspx

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  03-09-2008, 10:47 PM 4333 in reply to 4306

    Re: Creeare/atasare baza de date

    Poti folosi "perechea" de comenzi "EXECUTE AS" - "REVERT". Cu "EXECUTE AS" setezi alt context de executie - de exemplu baza de date va fi creata de catre "cine trebuie" Smile. Cu "REVERT" revii la starea initiala. De exemplu, presupunand ca esti un user "obisnuit", fara dreptul de a crea baze de date:

    SELECT SUSER_SNAME(), USER_NAME()

    USE master

    EXECUTE AS LOGIN = 'login1'

    SELECT SUSER_SNAME(), USER_NAME()

    CREATE DATABASE test

    REVERT;

    - login1 este "dbcreator"

    Cu  SELECT SUSER_SNAME(), USER_NAME()  "vezi" contextul de executie curent.

    Inainte de "EXECUTE AS", userului/loginului tau trebuie sa-i "dai" permisiunea de "IMPERSONATE" pentru "login1"

     

  •  03-12-2008, 3:31 PM 4353 in reply to 4333

    Re: Creeare/atasare baza de date

    Adaugand la ideea Dianei, se poate face o procedura stocata:

    CREATE PROCEDURE dbo.usp_ManageDB @DBName NVARCHAR(128)
    AS
    BEGIN
    DECLARE @sqlstatement NVARCHAR(150);
    SET @sqlstatement = 'DROP DATABASE '+@DBName;
    EXEC (@sqlstatement) AS LOGIN='LoginWithRights';
    END;
    GO


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  03-12-2008, 8:17 PM 4356 in reply to 4353

    Re: Creeare/atasare baza de date

    S-ar potrivi aici si un trigger DDL care sa monitorizeze crearea / distrugerea obiectelor. Un sfat bun gasesti aici:

    http://www.sqlskills.com/blogs/kimberly/2007/07/24/EXECUTEASAndAnImportantUpdateYourDDLTriggersForAuditingOrPrevention.aspx

    In ceea ce priveste valorile default nu te ajuta sa definesti DEFAULT-uri pe coloane?

  •  03-12-2008, 10:52 PM 4358 in reply to 4356

    Re: Creeare/atasare baza de date

    cind am spus 'valori default' ma refeream nu la valoarea cu care se initializeaza coloana x la adaugarea unui nou record, ci la un set de valori (recorduri) care trebuie sa fie intr-o anumita tabela in momentul instalarii aplicatiei.

    Multumesc inca o data pt implicare!

  •  03-13-2008, 9:09 AM 4362 in reply to 4358

    Re: Creeare/atasare baza de date

    Pentru asta pregatesti un script / o procedura care creeaza obiecte "user" in noua baza de date si populeaza tabelele.
  •  03-18-2008, 10:15 AM 4404 in reply to 4358

    Re: Creeare/atasare baza de date

    Aveam si eu o aplicatie C# cu care faceam asa ceva. Procedam asa:
    - aveam doua tipuri de useri, unul ce avea drepturi de creare baze de date, altul doar de conectare si I/U/D + Select
    - ma conectam cu primul user si:
    cream noua baza de date
    adaugam la ea userii din categoria II
    cream tabelele pe care le voiam "default"
    faceam inserturile pe ele, pentru a pune si valorile "default"
     
    Dupa aceea conexiunile se faceau cu userii de tipul II
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems