web-dev-qa-db-ja.com

SQL Server 2000の「db_owner」と「データベースを所有するユーザー」の違いは何ですか?

データベース更新スクリプトの1つが特定の顧客サイトで正しく機能しなかった理由をよりよく理解し、データベースの所有権と役割に絞り込んだ(と思います)。

免責事項:お客様のDBAからの返信を実際に待っているので、SQLデータベースを最近アップグレードしたかどうかをお知らせします。彼らのデータベース。更新スクリプトのいくつかの場所でdboを参照していたため、アプリケーションのデータベースログインがスキーマに変換された場合、SQL2000からSQL2005への変換がスクリプトを無駄にした可能性があると思います。

とにかく、私はデータベースの所有権と役割のより良い説明と、T-SQLステートメントで所有者を明示的に指定しない場合にデータベースオブジェクトが実際に割り当てられる所有者にどのように影響するかを見つけようとしています。たとえば、更新スクリプトは通常、_CREATE TABLE foo_などの代わりに_CREATE TABLE dbo.foo_を実行しますが、明示的にdboを使用しているものがいくつか見つかりました。これらは、で問題を引き起こしているものです。瞬間(この1人の顧客のみ)。

この記事 (SQL Server 2000に固有)が見つかりましたが、そのページの表はわかりにくいです。ユーザーが持つことができる役割の2つの異なる可能性として、_db_owner_と「データベースを所有している」と記載されています。

たとえば、この表は、_db_owner_ロールに属するユーザーsamがクエリCREATE TABLE [test3](abc int)を実行すると、samが所有することを示しています。 。

次に、「データベースを所有している」(原文のまま)別のユーザーsueが同じクエリを実行した場合、それはdbo

_db_owner_と「データベースを所有している」は同じものではないでしょうか。この表は、「_db_owner_ロールにいる」と実際には「データベースの所有者である」の間に違いがあることを示しています。しかし、それが本当なら、それが_db_owner_ロールのメンバーである以外の何かである場合、「データベースを所有する」とはどういう意味ですか?

19
Mike Spross

いいえ、db_ownerとデータベースの所有者は同じではありません。 dboはユーザーであり、db_ownerはデータベースロールです。データベースはログインによって所有されます。データベースを所有するログインはすべて、データベース内でdboとしてエイリアスされます。 sp_changedbownerシステムストアドプロシージャを使用して、データベースの所有者を変更できます。

データベース内のすべてのオブジェクトは、ユーザーが所有しています。 db_ownerロールのメンバーであるユーザーは、他のアクセス許可の中でも、dboが所有するオブジェクトを作成できます。ユーザーがdb_ownerのメンバーではないが、いくつかの作成権限(Create Tableなど)を持っている場合、ユーザーが作成するオブジェクトはすべて、それらを作成したユーザーによって所有されます。 sp_changeobjectownerシステムストアドプロシージャを使用して、オブジェクトの所有権を変更できます。

29
Thomas