Участник базы данных владеет схемой в базе данных и не может отбрасывать сообщение

28

Я пытаюсь удалить участника из базы данных, но не могу, потому что он владеет схемой. Однако, когда я иду редактировать пользователя, поле для снятия флажка становится синим и неустранимым. Как я могу удалить принципал из этих схем?

rsteckly
источник

Ответы:

31

Попробуйте T-SQL, чтобы сделать это:

alter authorization
on schema::YourSchemaName
to dbo
go

drop user TheUserYouWantToDelete
go

Вы не можете отбросить принципала, который является владельцем схемы, поэтому ALTER AUTHORZATIONизменяет принадлежащую схему (я использовал YourSchemaName, но, очевидно, заменил ее собственной схемой в вашей базе данных) на dbo(аналогично, вы можете изменить владельца на любого принципала, который вам нужен в вашем среда). Это позволит вам удалить пользователя, ранее владевшего схемой (например, для целей, которые я использовал TheUserYouWantToDelete, но теперь это будет не владелец, которого вы хотите удалить).

Томас Стрингер
источник
Хорошо, это сработало. Я, однако, немного смущен тем, почему. Почему мне нужно авторизовать схему для другой схемы? Может быть, мне нужно пересмотреть схемы ...
rsteckly
1
@rsteckly Упрощенно, авторизация = владение. Если бы вы могли удалить пользователя, которому принадлежит схема, схема была бы недействительной, потому что ее владелец больше не существует. Представьте, что вы можете удалить клиента, который разместил заказ. Что означает идентификатор CustomerID в таблице «Заказы», ​​если у него больше нет клиента, на которого он указывает? Куда я должен отправить заказ?
Аарон Бертран
Извините, мой пример не очень хорошо объяснен. Мы не меняем авторизацию на dboсхему, мы меняем авторизацию на dboпринципал. Это мог быть любой участник базы данных.
Томас Стрингер
30

Способ T-SQL работает. Благодаря http://zarez.net/?p=179 я нашел способ SSMS сделать это (UI).

Чтобы изменить владельца схемы из Sql Server Management Studio:

Expand your database -> Security -> Schemas

В Object Explorer Details вы можете увидеть список схем и владельцев:

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

Если вы не знаете, какие схемы принадлежат пользователю, проверьте его свойства.

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

Откройте свойства схемы, которой владеет Пользователь, и нажмите «Поиск», чтобы найти нового владельца. Если вы не знаете нового владельца, вы можете «Просмотреть» для одного.

Properites -> Search -> Browse

и вы можете сменить владельца схемы на dbo (или любого, кто наиболее подходит).

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

woodvi
источник
1
T-SQL намного лучше и гибче. Делать это через GUI всегда было (и есть) боль!
Кин Шах
Я все за способ T-SQL, а также потому, что он может быть использован в сценариях.
Вудви
2
Примечание: F7 - это ярлык для отображения подробностей, если он не появится
Simon_Weaver