Может кто-нибудь объяснить, есть ли какие-либо проблемы с использованием 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
. Это задокументировано здесь .