2009-06-05 4 views
1

Es gibt einen Anmeldenamen/Benutzer in SQL Server, der beim Importieren von Konten in den Produktionsserver Probleme hat. Ich habe keine Ahnung, mit welcher Methode er das macht. Laut dem einen Import funktioniert dieser Import im Entwicklungsserver einwandfrei. Aber wenn er den gleichen Import in der Produktion macht, gibt es ihm Fehler. Unten sind die Fehler, die er für jedes Konto erhält.Programmgesteuertes Vergleichen von Berechtigungen für Anmeldung/Benutzer in SQL Server 2005

2009-06-05 18:01:05.8254 ERROR [engine-1038] Task [1038:00001 - Members]: Step 1.0 [<Insert step description>]: Task.RunStep(): StoreRow has failed 
2009-06-05 18:01:05.9035 ERROR [engine-1038] Task [1038:00001 - Members]: Step 1.0 [<Insert step description>]: Task.RunStep(): StoreRow exception: Exception caught while storing Data. [Microsoft][ODBC SQL Server Driver][SQL Server]'ACCOUNT1' is not a valid login or you do not have permission. 

Bitte beachten Sie, dass "ACCOUNT1" nicht der richtige Kontoname ist. Ich habe es nur aus Sicherheitsgründen geändert.

Mit SQL Server Management Studio (SSMS) habe ich die Berechtigungen des Benutzers/der Anmeldung, die den Import vom Entwicklungsserver und von der Produktion zum Vergleich durchführen, angezeigt/geprüft. Ich habe keinen Unterschied gefunden.

Meine Frage ist: Gibt es eine Möglichkeit, Berechtigungen auf Server- und Datenbankebene eines bestimmten Login/Users programmgesteuert abzufragen, damit ich Unterschiede vergleichen/kontrastieren kann?

Antwort

2

Red Gate's SQL Vergleichen wird es für Sie tun.

1

sollten Sie in der Lage sein here

sp_helplogins '<loginname>' 

Siehe MSDN Referenz zu verwenden.

2

Dieser Code zeigt alle Rechte, die das Login hat.

select sys.schemas.name 'Schema', sys.objects.name Object, sys.database_principals.name username, sys.database_permissions.type permissions_type, 
    sys.database_permissions.permission_name, 
    sys.database_permissions.state permission_state, 
    sys.database_permissions.state_desc, 
    state_desc + ' ' + permission_name + ' on ['+ sys.schemas.name + '].[' + sys.objects.name + '] to [' + sys.database_principals.name + ']' COLLATE LATIN1_General_CI_AS 
from sys.database_permissions 
join sys.objects on sys.database_permissions.major_id = 
    sys.objects.object_id 
join sys.schemas on sys.objects.schema_id = sys.schemas.schema_id 
join sys.database_principals on sys.database_permissions.grantee_principal_id = 
    sys.database_principals.principal_id 
order by 1, 2, 3, 5 
+0

Sie sollten 'sys.all_objects' anschließen und verwenden' links join' überall, wie jetzt sind Sie Datenbankebene Berechtigungen und Systemobjekte fehlen. – ajeh