Аз имам:
- Единствен Microsoft SQL Server 2008 R2
- Две бази данни с няколко таблици:
DB1
иDB2
(и двете със същия собственик) - Изглед в DB1,
DB1.dbo.View1
, чеSELECT * FROM DB2.dbo.Table1
- Роля,
ViewRole
, в DB1 даде SELECT разрешение на изгледа (няма други разрешения) - Потребител на Windows,
DOMAINuser
, със зададена роля на сървъраpublic
, който принадлежи към DB1 "sViewRole
Когато потребителят се опита да ИЗБИРА от изгледа, получавам грешката:
Основният сървър "DOMAINuser" не може да получи достъп до базата данни "DB2" под текущия контекст на сигурността
Опитах се (и надявам се, че успя) да активирам кръстосаната собственост на кръстосана база данни, използвайки и двете:
EXEC sp_configure "Cross DB Ownership Chaining", "1";RECONFIGURE
и
EXEC sp_dboption DB1, "db chaining", "true"
EXEC sp_dboption DB2, "db chaining", "true"
За да потвърдите, че настройката е направена, изпълнявам:
SELECT name, owner_sid, is_db_chaining_on FROM sys.databases
и резултатът е:
name owner_sid is_db_chaining_on
DB1 0x0105...DCB510000 1
DB2 0x0105...DCB510000 1
Така че, защо няма да може потребителят да избере от изгледа? Няма да има грешка, ако изгледът се избира само от таблица в DB1.
Всеки има някакви предложения за това, което може да съм пропуснал или неразбран?
Отговори:
2 за отговор № 1Потребителят на прозорци трябва да има достъп до двете бази данни, за да може да използва верига за собственост на кръстосани данни.
Трябва също да деактивирате опцията на ниво сървър за сигурност и да активирате опцията само в базите данни.
Можете да прочетете повече за него тук www.mssqltips.com/sqlservertip/1782/understanding-cross-database-ownership-chaining-in-sql-server/