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