データベースのプロパティダイアログボックスの[ファイル]ページからデータベースの所有権を変更するとエラーが発生する


10

データベースを復元し、db_ownerとして新しいユーザー(ログイン元と同じユーザー)を作成しました。データベースダイアグラムを表示したいときにエラーが発生しました

このデータベースには有効な所有者がいないため、データベースダイアグラムサポートオブジェクトをインストールできません。続行するには、まず[データベースのプロパティ]ダイアログボックスの[ファイル]ページまたは[承認の変更]ステートメントを使用して、データベース所有者を有効なログインに設定し、次にデータベースサポートオブジェクトを追加します

データベースプロパティの[ファイル]ページから所有権を変更しようとすると、次のようなエラーが発生します。

データベース 'ABC'の所有者の設定に失敗しました。(Microsoft.SqlServer.SMO)追加情報:SMOで例外が発生しました提案された新しいデータベース所有者James-PC \ Jamesは、ユーザーJamesとしてこのデータベースにマップされています。パラメータ名:James-PC \ James "

別のシステムからデータベースのバックアップを復元した後、このコンピューターでデータベースダイアグラムを表示できるように、問題を修正してください。

回答:


8

データベースの所有者は、データベースのSIDで定義されている、データベースを所有するsys.server_principalsのログインです。復元後、データベースの復元に使用されたログインが、データベースの以前の所有者であったログインではない場合があります。(これは、データベースがサーバー間で移動された場合に発生する可能性がさらに高くなります。)

したがって、3つの設定で問題が発生している可能性があります

  1. データベースowner_sidがデータベースのdb_owner sidと等しくありません。これをデータベースABCと比較するには、次のようにします。

    SELECT owner_sid FROM sys.databases where name = 'ABC';

    ABC.sys.database_principalsからSIDを選択しますWHERE name = 'dbo';

  2. 次に、提案されたデータベースowner_sidもsys.database_principalsにユーザーとして存在するというメッセージが表示されます。これは、提案された所有者のマッピングに関するエラーメッセージからわかります。

だからあなたのステップは:

 USE ABC;
 DROP USER James;
 ALTER AUTHORIZATION ON DATABASE::ABC TO [James-PC\James];

dboにしているので、不要なユーザーを削除しました。それが邪魔にならない場合は、ログインをデータベースの所有者にすることができます。

編集:SSMSを使用して、ABCデータベースからJamesユーザーを削除することもできます。次に、データベースのプロパティの[ファイル]タブに戻って、データベースの所有者を設定します。(申し訳ありませんが、私はスクリプトを考える傾向があります。)


1
これは、Management StudioのYOUR_DB /セキュリティ/ユーザーの下に表示されないDBOとしたログインで、面白い、
joedotnot

-3
  1. 右クリックデータベース
  2. プロパティ
  3. ファイルを選択
  4. 所有者を修正/設定(yourpc \ youに、または「...」をクリックして参照して選択)

これはSQLサーバー管理スタジオv17.1で私のために働きました


2
これは彼らにとってうまくいかなかったと思います。
dezso 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.