[SQL Server] データベース プリンシパルは、データベースの スキーマ を所有しているので、削除できません

inno
2013-09-25 17:04 6670 1
データベースのユーザーを削除しようとした時下記のようなエラーが発生し、ユーザーが削除されない!!!


ユーザー 'TestUser' の削除に失敗しました。 (Microsoft.SqlServer.Express.Smo)
Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.Express.ConnectionInfo)
データベース プリンシパルは、データベースの スキーマ を所有しているので、削除できません。 (Microsoft SQL Server、エラー: 15138)

それで「Testuser」のプロパティを確認してみたらスキーマに「db_datareader」が設定されていました。


ユーザーが削除されない原因はエラーメッセージーにも書いてありますが、
削除しようとするユーザーがスキーマの所有者に設定されているため削除ができないわけです。

私の場合、「db_datareader」のスキーマの所有者に削除しようとした「TestUser」が設定されており削除ができませんでした。



では、スキーマの所有者を変更しましょう。
上記の画面で「検索」ボタンを押して変更もできますが、今回はSQL文を利用して変更したいと思います。

ALTER AUTHORIZATION ON SCHEMA::[スキーマ名] TO [スキーマ所有者]
GO

つまり、現在の設定だと下記のように設定されていることです。

ALTER AUTHORIZATION ON SCHEMA::db_datareader TO TestUser
GO

これを下記のように「db_datareader」の元の所有者の「db_datareader」に変更しましょう。

ALTER AUTHORIZATION ON SCHEMA::db_datareader TO db_datareader
GO

変更が完了したら「db_datareader」スキーマのプロパティを確認し、変更されているか確認しましょう。



問題なく変更されていますね。
では、問題が発生していたユーザーを削除しましょう。
また他のスキーマの所有者に設定されていない限り、正常に削除されると思います。

他にご不明な点がありましたら「Q&A」掲示板に投稿してください。

コメント

11 2016年 01月 07日 (16:17)
いゃあ、助かりました。おかげで削除できました。ありがとうございます。