Объекты поддержки диаграммы базы данных не могут быть установлены… нет действительного владельца

132

Я попытался создать диаграмму базы данных с помощью SQL Server 2008, но возникла ошибка:

Невозможно установить объекты поддержки схемы базы данных, поскольку у этой базы данных нет действительного владельца. Для продолжения сначала используйте страницу «Файлы» диалогового окна «Свойства базы данных» или инструкцию ALTER AUTHORIZATION, чтобы установить для владельца базы данных действительный логин, а затем добавьте объекты поддержки диаграммы базы данных.

Тогда я попробовал следующее:

EXEC sp_dbcmptlevel 'Ariha', '90';
GO
ALTER AUTHORIZATION ON DATABASE::Ariha TO [WIN-NDKPHUPPNFL\Administrator]
GO
USE Ariha
GO
EXECUTE AS USER = N'dbo' REVERT
GO

Далее появляется erorr:

Msg 15404, уровень 16, состояние 11, строка 1 Не удалось получить информацию о группе / пользователе Windows NT «WIN-NDKPHUPPNFL \ Administrator», код ошибки 0x534.

Проблема в том, что имя ПК изменилось на «DevPC». Я также изменил это в скрипте обновления, но все равно ошибка 15404.

Что я могу сделать, чтобы исправить эту досадную ошибку?

Rookian
источник
4
Эта проблема также возникает при восстановлении резервной копии с другой машины.
Тим Абелл
Когда вы восстанавливаете БД с другого компьютера, вы можете исправить эту ошибку, выполнив две команды: 1) alter authorization on database::[db_name] to [sa], а затем 2) снова запустить эту же команду и заменить [sa]ее пользователем, которому принадлежала база данных сразу после восстановления.
Джеймс Л.

Ответы:

182

Вы должны рассмотреть учетную запись аутентификации SQL для владения базой данных; тогда вам не нужно беспокоиться о приходе и уходе учетных записей, перемещении баз данных или экземпляров на другие серверы, а также об изменении имени вашего следующего компьютера. У меня есть несколько систем, в которых мы используем:

ALTER AUTHORIZATION ON DATABASE::Ariha TO [sa];

Или, если вы хотите изменить владельца этой учетной записи локального администратора, это должно быть:

ALTER AUTHORIZATION ON DATABASE::Ariha TO [DevPC\Administrator];

Поскольку переименование машины в DevPCустранило локальную учетную запись, которая раньше была названа, WIN-ND...\Administratorи это также сделало недействительным текущего владельца базы данных.

Если SELECT @@SERVERNAME;это неточно (должно быть сказано DevPC), то, чтобы гарантировать, что переименование вашего сервера закрепилось в SQL Server, вы также можете выполнить следующее:

EXEC sp_dropserver @server = N'old server name';
GO
EXEC sp_addserver @server = N'DevPC', @local = N'local';
GO
Аарон Бертран
источник
он показывает: «WIN-NDKPHUPPNFL» Я использовал ваше заявление sql, и оно работает ... но правильна ли эта настройка или мне нужно сделать что-то еще?
Rookian
Ну, это действительно зависит от обстоятельств. Если вам нужно, чтобы ваша база данных принадлежала пользователю домена / рабочей группы Windows, то, вероятно, есть над чем поработать. Лично я считаю это проблематичным. Может быть, сначала прочтите это: sqlblog.com/blogs/tibor_karaszi/archive/2009/12/30/…
Аарон Бертран
1
Есть ли проблемы с его настройкой, saесли у вас отключена аутентификация sql?
Тим Абелл
@AaronBertrand Привет, у меня есть вопрос. По умолчанию, если мы создаем базу данных, владельцем базы данных является текущий пользователь Windows, и если текущий пользователь Windows также является администратором. Почему нам нужно изменить его на Sql Authantication Login. На самом деле я не могу понять эту ошибку. Если мы изменим его на sa login, он заработает. Но администратор входа в Windows также является системным администратором. Не могли бы вы помочь?
UfukSURMEN
Я восстановил кучу баз данных, и все они отображали ошибку в вопросе OP, хотя свойства каждой базы данных указывали на действительного пользователя. Я использовал первую команду, чтобы изменить его на, [sa]а затем вернул его пользователю, который сказал, что это было раньше, и альт, больше никаких ошибок. Не уверен, почему при восстановлении базы данных не был правильно установлен владелец базы данных ...
Джеймс Л.
208

В SQL Server Management Studio выполните следующие действия:

  1. Щелкните правой кнопкой мыши по базе данных, выберите свойства
  2. Перейти на страницу параметров
  3. В раскрывающемся списке справа с надписью «Уровень совместимости» выберите «SQL Server 2005 (90)» 3-1. выберите «SQL Server 2008», если вы получите ошибку сопоставимости.
  4. Перейти на страницу файлов
  5. Введите «sa» в текстовое поле владельца. 5-1 или нажмите на многоточие (...) и выберите законного владельца.
  6. Хит ОК

после этого вы сможете получить доступ к диаграммам базы данных.

введите описание изображения здесь

Израиль Маргулис
источник
2
Есть ли причина, по которой база данных НЕ должна иметь владельца? Я захожу в чужую базу данных продуктов, а владельца нет. Было ли это намеренно? (У клиента нет никого, кто бы знал).
Джейсон Клебан
У базы данных должен быть владелец. Выбор «sa» вместо законного владельца - это просто легкий способ исправить вышеуказанную ошибку. Но выбор законного владельца тоже устранил проблему.
Lesly Revenge
3
Может ли кто-нибудь объяснить цель изменения уровня совместимости на этих этапах? Мне было достаточно просто установить владельца для файлов в 'sa' (хотя, как ни странно, у меня не включен sql auth).
Тим Абелл
Это сработало для меня. Однако мне нужно было удалить моего пользователя из Databasename> Security.
Gezim
Это сработало для меня, на SQL Server 2017, с использованием Management Studio 17.9, без необходимости в шаге 1
Джорджио Барчиези
7
USE [ECMIS]
GO
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
GO

Оно работает.

RafiO
источник
5

Введите "SA" вместо "sa" в текстовое поле владельца. Это сработало для меня.

Adarsh ​​VC
источник
5

У меня такая же проблема.
Я хотел посмотреть дома свою схему, которую создал в тот же день на работе. Но я не мог из-за этого сообщения.
Я обнаружил, что владельцем базы данных был пользователь моего компьютера, как и ожидалось. но поскольку компьютер находится в домене компании, а я не подключен к сети компании, база данных не смогла определить владельца.

Я сменил владельца на локального пользователя, и это сработало !!
Надеюсь, это кому-нибудь поможет.

Вы меняете пользователя, щелкнув правой кнопкой мыши базу данных, свойства, файлы, владельца

PhpLou
источник
3

Это исправило это для меня. Он устанавливает владельца, указанного в разделе «файлы» окна свойств базы данных, и выполняется в соответствии со сценарием студии управления.

USE [your_db_name]
GO
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false
GO

Согласно документации sp_changedbowner, теперь это устарело.

На основании ответа Израиля. Ответ Аарона - это не устаревший вариант этого.

Тим Абелл
источник
3

Выберите базу данных - щелкните правой кнопкой мыши - выберите Свойства

Выберите ФАЙЛ в левой части страницы

В поле ВЛАДЕЛЕЦ выберите кнопку с тремя точками (…) внутри

Теперь выберите пользователя и нажмите ОК.

Анил Рана
источник
0

Я только что испытал это. Я прочитал предложения на этой странице, а также предложения SQL Authority (что одно и то же), и ничего из вышеперечисленного не сработало.

В конце концов, я удалил учетную запись и создал заново (с тем же именем пользователя и паролем). Просто так все проблемы ушли.

К сожалению, это означает, что я не знаю, что пошло не так, поэтому больше не могу поделиться.

Дейв
источник
0

1. Щелкните правой кнопкой мыши свою базу данных, 2. Затем выберите свойства. 3. Выберите опцию в уровнях совместимости, выберите sql 2008 [100], если вы работаете с Microsoft sql 2008.

4. Затем выберите файл и напишите (sa) в текстовом поле владельца

У меня 100% работает.

Джефферсон Х Масонский
источник
0

Более простой способ решить эту проблему - щелкнуть правой кнопкой мыши имя вашей базы данных, выбрать «Новый запрос», ввести «exec sp_changedbowner 'sa'» и выполнить запрос. Тогда тебе будет хорошо идти.

Лебоне Макдональд
источник
0

вы должны войти как администратор, щелкнуть правой кнопкой мыши в студии управления сервером microsofft sql и запустить как администратор

Абдельназер Рафат
источник
0

Нужно только выполнить его в редакторе запросов. ALTER AUTHORIZATION ON DATABASE :: YourDatabase TO [domain \ account];

Нуи Сан
источник
-3

Реальная проблема заключается в том, что владелец по умолчанию (dbo) вообще не имеет имени, сопоставленного с ним. Когда я попытался сопоставить имя входа sa с владельцем базы данных, я получил еще одну ошибку с указанием «Пользователь, группа или роль« dbo ». уже существует ... ". Однако, если вы попробуете этот код, он действительно будет работать:

EXEC sp_dbcmptlevel 'yourDB', '90';

идти

ИЗМЕНЕНИЕ РАЗРЕШЕНИЯ НА БАЗУ ДАННЫХ :: yourDB TO "yourLogin"

идти

используйте [yourDB]

идти

ВЫПОЛНИТЬ КАК ПОЛЬЗОВАТЕЛЬ = N'dbo 'REVERT

идти

Вандана
источник
-3

щелкните правой кнопкой мыши на вашей базе данных, затем выберите свойства. выберите опцию в уровнях совместимости, выберите sql 2005 [90] вместо 2008, если вы работаете с Microsoft sql 2008. затем выберите файл и напишите (sa) в текстовое поле владельца. это сработает наверное

Эццо Гасмаллах
источник