Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

MSSQL_ERROR_15517 1С:Предприятие и СУБД

MSSQL Error 15517: Cannot execute as the database principal because it does not exist

Обновлено: 25.08.2026 · Официальная документация ↗
  • Ошибка Msg 15517, Level 16, State 1: Cannot execute as the database principal because the principal 'dbo' does not exist, this type of principal cannot be impersonated, or you do not have permission.
  • Регламентные задания, Service Broker, CDC или планы обслуживания падают сразу после восстановления базы из бэкапа на новом сервере.
  • Невозможно открыть свойства базы данных в среде SQL Server Management Studio (SSMS).

1. Проверка текущего владельца базы данных

SELECT name, owner_sid, SUSER_SNAME(owner_sid) AS OwnerLoginName 
FROM sys.databases 
WHERE name = 'your_1c_db';

Если в колонке OwnerLoginName отображается NULL, значит учетная запись, создавшая базу на старом сервере, отсутствует на текущем сервере.

2. Восстановление валидного владельца базы (Fix dbo)

USE your_1c_db;
GO
-- Назначение локального sa владельцем базы
ALTER AUTHORIZATION ON DATABASE::your_1c_db TO [sa];
GO

3. Проверка параметров TRUSTWORTHY и контекста EXECUTE AS

-- Включение доверительного контекста (если процедуры используют внешние ресурсы)
ALTER DATABASE your_1c_db SET TRUSTWORTHY ON;

4. Проверка и перекомпиляция модулей с конструкцией WITH EXECUTE AS

SELECT o.name, m.definition, m.execute_as_clause 
FROM sys.sql_modules m
JOIN sys.objects o ON m.object_id = o.object_id
WHERE m.execute_as_clause IS NOT NULL;
💡 Практика специалистов: Включите в стандартный скрипт восстановления (post-restore script) автоматическое выполнение директивы ALTER AUTHORIZATION ON DATABASE::[DB_NAME] TO [sa]; чтобы навсегда исключить появление ошибки 15517 в пайплайнах тестирования 1С.

Частые вопросы (FAQ)

Почему ошибка 15517 всегда возникает после операции RESTORE базы 1С?

Резервная копия сохраняет оригинальный SID владельца базы. Если на новом экземпляре SQL Server нет логина с таким же SID (например, это был локальный администратор старого сервера), база остается без владельца.

Обязательно ли устанавливать владельцем именно sa?

Не обязательно, но рекомендуется. Владельцем может быть любой валидный серверный логин (Server Principal) с правами sysadmin, который гарантированно не будет удален.

Влияет ли ошибка 15517 на регламентные задания 1С:Предприятие?

Да, встроенные механизмы SQL Server (CDC, фоновые очистки индексов, Service Broker очереди), вызываемые от имени dbo, перестают работать до устранения ошибки.

Как исправить владельца сразу для всех баз данных 1С на сервере?

Используйте курсор по sys.databases: EXEC sp_MSforeachdb 'IF ''?'' NOT IN (''master'',''model'',''msdb'',''tempdb'') ALTER AUTHORIZATION ON DATABASE::[?] TO [sa];'.

Полезные материалы
Рекомендуем