SQL Server 2008 でデータベース所有者を変更すると、使用される方法に応じて CLR の問題が発生しますか?

SQL Server 2008 でデータベース所有者を変更すると、使用される方法に応じて CLR の問題が発生しますか?

データベースをアタッチし、所有者を有効なログインに変更しようとしました。

私は次のステートメントを使用しました: ALTER AUTHORIZATION ON database::my_db_name TO "sa"。データベースのプロパティでは、新しい所有者が 'sa' であることが示されましたが、制限のない CLR アセンブリ (0x80FC80F1、0x8013150A) のアクセス許可エラーが引き続き発生し、アセンブリの信頼の問題に関するものとなりました。

代わりに、EXEC sp_changedbowner 'sa'; というステートメントを使用してデータベース所有者を変更することで、この問題を解決しました。

私の質問は、データベース所有者を変更するこれら 2 つの方法の違いは何ですか。これらは同等ですか? sp_changedbowner は、alter authorization ステートメントが行っていない、より適切な処理を実行していることは明らかです。


ご興味があれば... sp_changedbowner で問題を修正する前に、次のことを試しました:

  • データベースの信頼できるプロパティをONに設定する。実際、私はこれを数回実行しました。これは、制限のない署名されていないカスタムCLRアセンブリを実行するための要件であることを知っています。
  • 各 CLR アセンブリの所有者が空白だったため、それを dbo に変更しましたが、どうやら dbo は既に所有者であり、SSMS では常に空白のままです。
  • 各 CLR アセンブリの所有者を別のものに変更しようとしましたが、依存アセンブリを持つアセンブリには常に同じ所有者が必要であるように見えるため、これは機能しません。ただし、提供されているインターフェイスを使用して両方の所有者を同時に変更することは不可能です。
  • [sa]にGRANT UNSAFE ASSEMBLYを呼び出します。どうやら、その組み込みアカウントと他のいくつかのアカウントに権限を付与することはできないようです。すでに権限を持っているからです。
  • GRANT UNSAFE ASSEMBLY を [NT AUTHORITY\NETWORK SERVICE] (アセンブリ内のアカウント呼び出しメソッド) に呼び出しました。エラーは発生しませんでしたが、何も達成されていないようです (エラー番号が変更された可能性があります。ただし、メッセージは変更されませんでした)。
  • ...そしておそらく、思い出せない他のいくつかのこと。

答え1

あなたのリストでは、データベースの設定が信頼できるとは思えないので、この手順を忘れたのではないかと思います。

ALTER DATABASE my_db_name SET TRUSTWORTHY ON;

でもそうじゃないかもしれない...

この記事で確認すると:http://support.microsoft.com/kb/918040どうやら、ALTER AUTHORIZATION の代わりに sp_changedbowner を使用することを推奨しているようです。しかし、実際には、まったく同じことを行います (sp_changedbowner は、背後で ALTER AUTHORIZATION を呼び出します)。違いは、dbo ユーザーの「エイリアス」も削除し (いずれにしても非推奨の機能)、データベースのチェックポイントを強制することです。この最後の部分が、探しているものかもしれません。

答え2

ALTER_AUTHORIZATIONと はどちらもデータベース オブジェクトの所有権を変更できると思いますsp_changedbowner。もちろん、コマンドの違いは、 はALTER_AUTHORIZATION他のもの (テーブルの所有権など) を変更できるのに対し、 はsp_changedbownerデータベースの所有者を変更するだけであるということです。

あなたが指摘した動作は非常に奇妙に聞こえます。それを再現できますか?

関連情報