データベースプリンシパルはデータベース内のスキーマを所有しているため、ドロップできません


28

データベースからプリンシパルを削除しようとしていますが、スキーマを所有しているためできません。ただし、ユーザーを編集する場合、スキーマのチェックを外すボックスは青色で削除できません。これらのスキーマからプリンシパルを削除するにはどうすればよいですか?

回答:


31

これを行うには、T-SQLを試してください。

alter authorization
on schema::YourSchemaName
to dbo
go

drop user TheUserYouWantToDelete
go

スキーマ所有者であるプリンシパルを削除することはできないため、ALTER AUTHORZATION所有スキーマ(私は使用YourSchemaNameしましたが、データベース内の所有スキーマで明らかに置き換えます)にdbo変更します(同様に、所有権を必要なプリンシパルに変更できます)環境)。これにより、以前にスキーマを所有していたユーザーを削除できます(たとえばTheUserYouWantToDelete、私が使用した目的ですが、これは現在、所有者ではないユーザーを削除することになります)。


さて、これでうまくいきました。ただし、その理由については少し混乱しています。スキーマを別のスキーマに承認する必要があるのはなぜですか?たぶん私はスキーマをレビューする必要があります
...-rsteckly

1
@rsteckly簡略化、承認=所有権。スキーマを所有しているユーザーを削除できる場合、所有者が存在しないため、スキーマは無効になります。注文した顧客を削除できると想像してください。指し示す顧客がなくなった場合、OrdersテーブルのCustomerIDはどういう意味ですか?注文品はどこに発送すればよいですか?
アーロンバートランド

申し訳ありませんが、私の例は十分に説明されていません。dboスキーマの承認を変更するのではなく、dboプリンシパルの承認を変更します。データベースプリンシパルでもかまいません。
トーマスストリンガー

30

T-SQLの方法が機能します。http://zarez.net/?p=179のおかげで、 これを行うSSMSの方法を見つけました(UI)。

Sql Server Management Studioからスキーマ所有者を変更するには:

Expand your database -> Security -> Schemas

オブジェクトエクスプローラーの詳細には、スキーマと所有者のリストが表示されます。

ここに画像の説明を入力してください

ユーザーがどのスキーマを所有しているかわからない場合は、ユーザーのプロパティを確認してください。

ここに画像の説明を入力してください

ユーザーが所有するスキーマのプロパティを開き、「検索」をクリックして新しい所有者を見つけます。新しい所有者がわからない場合は、所有者を「参照」できます。

Properites -> Search -> Browse

スキーマの所有者をdbo(または最も適切な人)に変更できます。

ここに画像の説明を入力してください


1
T-SQLの方法ははるかに優れており、柔軟です。GUIを使用してそれを行うには、常に苦労があります(苦労しています)。
キンシャー

また、スクリプトで使用できるため、私はすべてT-SQLの方法を使用しています。
woodvi

2
注:F7は、詳細が表示されない場合に詳細を表示するショートカットです
-Simon_Weaver
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.