web-dev-qa-db-ja.com

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アセンブリを呼び出す;明らかに、そのビルトインアカウントだけでなく、他のいくつかのアカウントにもアクセス許可を付与することはできません。彼らはすでに許可を得ています
  • [NT AUTHORITY\NETWORK SERVICE](アセンブリのアカウント呼び出しメソッド)へのGRANT UNSAFEアセンブリの呼び出し。エラーはありませんが、何かを達成するようには見えませんでした(おそらくエラー番号が変更されましたか?メッセージは変更されませんでした)。
  • ...そして、おそらく覚えていない他のいくつかのこと。
7
Triynko

あなたのリストでは、データベースを信頼できるものとして設定しているようには見えないので、このステップを忘れたと思います。

ALTER DATABASE my_db_name SET TRUSTWORTHY ON;

しかし、多分そうではない...

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

3
user13734

私は信じている ALTER_AUTHORIZATIONおよびsp_changedbownerはどちらもデータベースオブジェクトの所有権を変更できます。もちろん、コマンドの違いはALTER_AUTHORIZATIONは他のこと(テーブルの所有権など)を変更できますが、sp_changedbownerは、データベースの所有者を変更するためのものです。

ただし、指定した動作は非常に奇妙に聞こえます。再現できますか?

4
Adam Brand