ユーザー `dbo`とsys.databasesに保存されているデータベースの所有者の違いは何ですか


11

最近dbo、データベースのユーザーがとsid一致しないを持っている場所に質問がありowner_sidましたsys.databases。データベースの所有者がロールのメンバーとどのように異なるかを理解していますがdb_owner、ユーザーdboがデータベースの実際の所有者であるといつも思っていました。そうではありませんか?そして、もしそうならdbo、何が入っているのsys.databasesか、何が本当の違いがあるのですか?

回答:


8

ユーザーdboは実際にデータベースの所有者であるといつも思っていました。

それは正しい(または少なくとも正しいはずです)。そのユーザーの名前 "dbo"は決して変更されませんが、基になるSIDは、データベースを作成したユーザー、またはsp_changedbowner(SQL Server 2005を含む)またはALTER AUTHORIZATION(SQLで始まる)を介して設定されたユーザーによって異なります。 Server 2008)。

これら3つのケースすべてで、レコードsys.databasesが変更され、同期が保たれます。ただし、データベースを別のシステムまたは同じインスタンスから復元するが、所有者を変更するためにこれらの2つのSQLコマンドの1つが実行される前にバックアップまたはデタッチされたDBから復元する場合、RESTOREまたはアタッチ時に、間のミスマッチもowner_sidの列sys.databasesと「DBO」sidsys.database_principalsそのDBインチ

私の知る限りではsys.database_principals、各DBのレコードは実際の所有者であり、のowner_sidsys.databasesはレコードの保持/利便性の問題です(非正規化と同様です。sys.databasesシステムがなければ、システムはすべてのDBに対して個別のクエリを実行する必要があります。要求されるたびにその情報を入手してください!)およびセキュリティ。それが使用される1つのことは、有害である可能性がある/無効な復元/接続されたDBを識別することです。それらのレコードが一致しません。マークされたアクセスSQLCLRアセンブリしようとしてどちらかEXTERNAL_ACCESSまたはUNSAFE1が有効の安全性の低いルートを行くことを選択した場合はロードされませんTRUSTWORTHY、それは持っているいずれかのログインと一致する必要がありますように、そのように「DBO」SIDに依存しているEXTERNAL ACCESS ASSEMBLYかをUNSAFE ASSEMBLY許可。また、これらの2つのシステムカタログビュー間でSIDに不一致がある場合、どちらを使用するかを決定できず、潜在的なセキュリティ問題がある場合のレッドフラグとして使用されます。実際、SQL#のインストールスクリプトでこの状態をテストして、適切な変更を加えるように誰かに警告します。これにより、SQL Serverが何らかの点で不平を言った場合に備えて、時間を無駄にせずに済みます。

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