2014/07/12

【SQL Server】ユーザーが削除できないときの対処法

SQL Serverでバックアップファイルを復元すると、ユーザ情報を一旦削除して再作成してからでないとログインできなくなる仕様(バグ?)がある。
しかし、ユーザを削除するときに、エラーが発生し削除できないことがある。

以下、実際の業務で出会ったら2つのエラーについて、その原因対処法をまとめる。
※SQL Server Management Studioで操作することが前提

  1. Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。
  2. データベース プリンシパルは、データベースの スキーマ を所有しているので、削除できません。


1. Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。


Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。

原因

[ログインのプロパティ - sa]ダイアログボックスの[全般]タブで[資格情報にマップ]のチェックがオフになっている場合に発生する。 

対処法


1.[セキュリティ]→[ログイン]→[sa]のプロパティを表示する

2.[ログインのプロパティ - sa]ダイアログの[全般]タブで、[資格情報にマップ]のチェックをオンにする

3.対象ユーザを削除する



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


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

原因

「このユーザーが所有するスキーマ」にチェックを入れると、そのスキーマのOwnerになってしまうため、ユーザを削除できなくなる。チェックボックスも非活性になり、解除できない。

対処法

1.[セキュリティ]→[ログイン]→[sa]のプロパティを開く

2.「ユーザーマッピング」タブでユーザにマッピングされたデータベース(スキーマ)を確認する
3.[データベース]→2.で確認したデータベース→[セキュリティ]→[スキーマ]→2.で確認した規定のスキーマ のプロパティを表示する

4.[全般]タブからスキーマの所有者を適当なユーザ(dboなど)に変更し、一時的に所有権を渡す
5.対象ユーザを削除する
6.ユーザを再作成し、「スキーマの所有者」を元に戻す


以上

written by @bc_rikko

0 件のコメント :

コメントを投稿