Последствия использования 'Publi c' в качестве аргумента принципа базы данных для sp_getapplock - PullRequest
0 голосов
/ 30 апреля 2020

SQL Сервер sp_getapplock принимает последний параметр [database_principal] и по умолчанию это publi c. Из-за разрешений на нашем сервере разработки у нас работает только «Publi c».

В подавляющем большинстве примеров и документации для этого параметра используется «dbo», и на самом деле не объясняется, почему вы хотите использовать «dbo» вместо «Publi c» или последствия использования Publi c over DBO.

Может кто-нибудь объяснить, есть ли какие-либо опасения относительно использования publi c вместо dbo? Что нужно знать?

1 Ответ

1 голос
/ 30 апреля 2020

Может кто-нибудь объяснить, есть ли какие-либо проблемы с использованием publi c вместо dbo?

С publi c любой другой пользователь базы данных может получить блокировку. Когда вы устанавливаете альтернативного принципала, блокировка делится, и только указанный участник может получить блокировку.

exec sp_getapplock 'foo','exclusive','Transaction',null,'dbo'

не будет блокироваться или блокироваться

exec sp_getapplock 'foo','exclusive','Transaction',null,'Public'

Так что если вы хотите чтобы гарантировать, что ненадежный пользователь базы данных не сможет получить блокировку, укажите 'dbo' и запустите его как dbo или как хранимую процедуру execute as owner. Это задокументировано здесь .

...