0

Ich schrieb ein Programm in C# mit dem Microsoft Sync Framework, um zwei SQL-Datenbanken zu synchronisieren. Nach einer erfolgreich verlaufenen Server- und Client-Provisioning, setzen ich die folgenden Berechtigungen auf dem Client initiiert die Synchronisation:Welche Berechtigungen werden benötigt, um zwei SQL-Datenbanken mit Micorosoft Sync Framework mit Massenprozeduren zu synchronisieren?

GRANT VIEW CHANGE TRACKING ON OBJECT::dbo.My_Table to my_role 
GRANT DELETE ON [dbo].[My_Table_tracking] TO [my_role] AS [dbo] 
GRANT INSERT ON [dbo].[My_Table_tracking] TO [my_role] AS [dbo] 
GRANT SELECT ON [dbo].[My_Table_tracking] TO [my_role] AS [dbo] 
GRANT UPDATE ON [dbo].[My_Table_tracking] TO [my_role] AS [dbo] 
GRANT DELETE ON [dbo].[scope_info] TO [my_role] AS [dbo] 
GRANT INSERT ON [dbo].[scope_info] TO [my_role] AS [dbo] 
GRANT SELECT ON [dbo].[scope_info] TO [my_role] AS [dbo] 
GRANT UPDATE ON [dbo].[scope_info] TO [my_role] AS [dbo] 
GRANT DELETE ON [dbo].[scope_config] TO [my_role] AS [dbo] 
GRANT INSERT ON [dbo].[scope_config] TO [my_role] AS [dbo] 
GRANT SELECT ON [dbo].[scope_config] TO [my_role] AS [dbo] 
GRANT UPDATE ON [dbo].[scope_config] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_selectrow] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_update] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_updatemetadata] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_selectchanges] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_insertmetadata] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_insert] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_deletemetadata] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_delete] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_bulkupdate] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_bulkinsert] TO [my_role] AS [dbo] 
GRANT EXECUTE ON [dbo].[My_Table_bulkdelete] TO [my_role] AS [dbo] 

ich die folgenden Ressourcen verwendet, um das Skript zu setzen oben zusammen:

Allerdings, wenn ich das Programm ausführen, der folgende Fehler i s protokolliert:

An SqlParameter with ParameterName '@changeTable' is not contained by this SqlParameterCollection

den Benutzer Nach Zuordnen der Abfrage der eingebauten in db_owner Rolle ausgeführt wird, funktioniert das Programm einwandfrei.

Gibt es eine Möglichkeit, kann ich die effektiven Berechtigungen zu my_role und db_owner gewährt vergleichen? Wie kann ich das Berechtigungsproblem mit SQL Server debuggen (das sql Serverprotokoll, das in ssms gezeigt wird, zeigt nichts an, das zu meinem Problem in Verbindung steht)? Oder: Welche genauen Berechtigungen werden benötigt, um Microsoft Sync Framework zwei Datenbanken mit Massenprozeduren zu synchronisieren?

Antwort

0

Die gespeicherten Prozeduren, die für Massenvorgänge verantwortlich sind, verwenden einen benutzerdefinierten Tabellentyp, der nach der Tabelle benannt ist, die synchronisiert wird, z. Mytable_BulkType.Um diese Verfahren auszuführen, muss der Benutzer die folgende Berechtigung für den Tabellentyp:

GRANT CONTROL ON TYPE::[dbo].[MyTable_BulkType] TO [my_role] AS [dbo] 
1

Is there any way, I can compare the effective permissions granted to my_role and db_owner?

Um zu sehen, welche Berechtigungen Mitglieder Ihrer Rolle haben, sollten Sie einen Benutzer ausgeben, die ein Mitglied Ihrer Rolle my_role ist und überprüfen Sie die Berechtigungen wie folgt aus:

execute as user = 'my_user_member_of_my_role'; 
select * 
from sys.fn_my_permissions(null, 'database'); 
revert; 

Dann überprüfen, welche Berechtigungen db_owner hat: das gleiche tun, indem Sie einige Mitglied db_owner Rolle Identitätswechsel, oder wenn Sie sysadmin nur überspringen sind Identitätswechsel:

execute as user = 'my_user_member_of_db_owner'; -- skip it if you are sysadmin 
select * 
from sys.fn_my_permissions(null, 'database'); 
revert; -- skip it if you are sysadmin 

How can I debug the permission issue with sql server (the sql server log shown in ssms does not show anything related to my issue)?

Sie sollten, dass dieser Fehler erkennen:

An SqlParameter with ParameterName '@changeTable' is not contained by this SqlParameterCollection

ist nicht SQL Server-Fehler.

Es ist also ein Fehler Ihres Programms, debuggen Sie es mit Ihrer Programmierumgebung.

Or: Which exact permissions are needed to make the Microsoft Sync Framework synchronize two database with bulk procedures?

Welchen genauen Code sollten Sie ausführen?

Wenn Sie hier die Befehle eingeben, die Sie ausführen möchten, schreibe ich Ihnen alle notwendigen Berechtigungen, um es zu tun.

P.S. Wenn Sie BULK INSERT verwenden, sollten Sie über die Serverebenenberechtigung ADMINISTER BULK OPERATIONS verfügen. Diese Berechtigung wird db_owner s nicht erteilt. Wenn es das Problem war, konnten Sie es nicht lösen, indem Sie einfach Ihren Benutzer zur Datenbankrolle db_owner hinzufügen.

+0

Dank für den Hinweis auf die fn_my_permissions Funktion verwende ich es jetzt um den Vergleich zu tun. Ein sehr ausführlicher Bericht über ein ähnliches Problem wird [in den Microsoft-Foren] beschrieben (https://social.microsoft.com/Forums/en-US/cded4c01-5074-4d52-ba41-ceb500d92c17/an-sqlparameter-with-parametername -channetable-is-not-contained-by-this-sqlparametercollection? forum = syncdevdiscussions). – BdN3504

Verwandte Themen