Rozwiązywanie problemów z metadanych widoczność rozproszonych widoków partycji
Próbie niski uprawnień do wstawiania, aktualizacji lub usuwania danych za pośrednictwem rozproszony widok partycjonowany, SQL Server generuje następujący błąd:
Błąd 4436 "Wyświetl wszystkie Unii" %. * ls nie jest aktualizowalny ponieważ kolumna partycjonowania nie został znaleziony. "
Ten problem nie wpływa na widoki lokalnie podzielonym na partycje, na przykład kiedy istnieje tabel podstawowych na tym samym wystąpienie z SQL Server.
Tło
W przypadku kwerend rozproszonych SQL Server musi być w stanie odczytać definicji SQL ograniczeń CHECK na tabelach zdalnego serwera (połączony).Oznacza to, że obiekt wywołujący zapytanie rozproszone musi mieć uprawnienie kontroli, ALTER, własność lub definicji WIDOKU tabela zdalna.Jeśli wywołujący zapytanie rozproszone nie ma uprawnień, awarii kwerendy z powodu błędu 4436.
Ostrzeżenie
Jeśli użytkownik nie ma jednego z tych uprawnień, wartość definicji kolumna w sys.check_constraints ma wartość NULL, gdy użytkownik sprawdza katalog.
Aby rozwiązać problem 4436
Uwidocznić wywołującego definicji ograniczenie typu CHECK, należy udzielić wywołującego definicji WIDOKU w każdej tabela miejsce docelowe podporządkowanej rozproszony widok partycjonowany.
Załóżmy, że Server1 i Server2 serwerów federacyjnych i zostały zdefiniowane jako serwerów połączonych ze sobą.Załóżmy, że master.dbo.t1 jest tabela partycjonowana , jest możliwy przez wszystkich członków dpv_users rola bazy danych.Załóżmy, że dpv_users zawiera wszystkich użytkowników, które mają wybierz INSERT, UPDATE i usunąć dostęp za pośrednictwem rozproszony widok partycjonowany.
Wykonać następujący kod dla każdego serwer połączony.
CREATE TABLE t1(c INT PRIMARY KEY CHECK (...)) ; -- CHECK is different on each server.
GO
GRANT SELECT, INSERT, UPDATE, DELETE, VIEW DEFINITION ON t1 TO dpv_users ;
GO
CREATE VIEW the_dpv AS
SELECT * FROM Server1.master.dbo.t1
UNION ALL
SELECT * FROM Server2.master.dbo.t1
GO
Zobacz także