9

Ich habe eine Datenbank in SQL Server 2008 R2 erstellt und verwende Visual Studio 2010 Ultimate, um ein Datenbankprojekt dafür zu erstellen.Wie werden Benutzer und Anmeldungen in Visual Studio-Datenbankprojekt behandelt?

Ich habe sowohl ein SQL Server-Projekt als auch ein Datenbankprojekt erstellt, um meine Umgebung basierend auf dieser MSDN walkthrough darzustellen. Die Schemavergleiche für beide Projekte funktionieren wie erwartet und ich bin in der Lage, alle Änderungen Server in Projekt zu replizieren.

Es scheint jedoch einige umgebungsspezifische Konfiguration importiert zu haben, wie Logins, Benutzer-/Login-Mapping, lokale Dienstkonten (zB NT SERVICE \ MSSQL $ SQLEXPRESS2008), usw. Das scheint nicht ideal zu sein, denn meine Impression war diese Datenbank Das Projekt könnte auf einem anderen Server bereitgestellt werden, und diese umgebungsspezifischen Details könnten unterschiedlich sein. Zum Beispiel könnten die benannten Instanzen zwischen Dev, QA und Prod unterschiedlich sein. Benutzer könnten verschiedenen Logins zugeordnet werden.

Mache ich das richtig oder sollte ich zusätzliche Schritte unternehmen, um das Datenbankprojekt in alle Umgebungen portierbar zu machen?

Mein Ziel ist es, dieses Projekt zu

  1. Capture-Schema in der Versionskontrolle zu nutzen
  2. deploy Schemaänderungen wie durch Skripte ändern
  3. Bindung an Unit-Tests Erzeugen eine Einweg-Testumgebung auf dem schaffen Fliege.

Antwort

7

Wir haben vor damit zu Chaos hatte und endete Jamie Thompson Idee der Schaffung nach der Bereitstellung mithilfe von Skripts auf Berechtigungen für eine Variable, die den Namen der Umgebung/Konfiguration enthält, behandeln basiert. Sie können den Artikel finden Sie hier: http://sqlblog.com/blogs/jamie_thomson/archive/2010/07/21/a-strategy-for-managing-security-for-different-environments-using-the-database-development-tools-in-visual-studio-2010.aspx

ich auch ein Skript Scripting von Berechtigungen zu handhaben schrieb:

SELECT 
state_desc + ' ' + permission_name + 
' on ['+ ss.name + '].[' + so.name + '] 
to [' + sdpr.name + ']' 
COLLATE LATIN1_General_CI_AS as [Permissions T-SQL] 
FROM SYS.DATABASE_PERMISSIONS AS sdp 
JOIN sys.objects AS so 
    ON sdp.major_id = so.OBJECT_ID 
JOIN SYS.SCHEMAS AS ss 
    ON so.SCHEMA_ID = ss.SCHEMA_ID 
JOIN SYS.DATABASE_PRINCIPALS AS sdpr 
    ON sdp.grantee_principal_id = sdpr.principal_id 

UNION 

SELECT 
state_desc + ' ' + permission_name + 
' on Schema::['+ ss.name + '] 
to [' + sdpr.name + ']' 
COLLATE LATIN1_General_CI_AS as [Permissions T-SQL] 
FROM SYS.DATABASE_PERMISSIONS AS sdp 
JOIN SYS.SCHEMAS AS ss 
    ON sdp.major_id = ss.SCHEMA_ID 
    AND sdp.class_desc = 'Schema' 
JOIN SYS.DATABASE_PRINCIPALS AS sdpr 
    ON sdp.grantee_principal_id = sdpr.principal_id 
order by [Permissions T-SQL] 
GO 

Zusammen, habe ich die Berechtigungen in post-bereitstellen Skripte und Ordner, die Benutzer erstellen wird/Rollen/Berechtigungen basierend auf der Umgebung. Wir rufen ein "Wrapper" -Skript aus dem Haupt-Post-deploy-Abschnitt auf, der den Rest durchgeht, um herauszufinden, welcher Abschnitt ausgeführt werden soll.

+0

Ist dies immer noch die beste Lösung für neuere Versionen von SQL Server und Visual Studio? Ich versuche, den besten Weg zu finden, dies auf VS2015 jetzt zu handhaben, aber nichts Neues zu sehen. – ngneema

+1

Ich habe nichts Neues über Möglichkeiten gesehen, dies zu tun, obwohl es in VS2015 genauere Einstellungen gibt, um verschiedene Objekttypen zu ignorieren. –

Verwandte Themen