SQLServerとdbo
SQLServerの話の中でdbo
というワードが出てきた場合、何を意味しているのかを注意して聞かなければならないと考えています
ユーザとしてのdbo
dbo ユーザー アカウント
ある作業実行したんだけど、うまく行かなかったんだよね。
それdbo
で実行した?
というような場合。dbo
は、データベースの所有者という意味であり、データベースのすべてのアクティビティを実行する暗黙権限を持ったユーザー アカウントとして表現されています。
※sysadmin
ロールのメンバーは、自動的に dbo
にマップされます。
ロールとしてのdbo(=db_owner)
db_owner
あれ、私のアカウントdbo
に入っていなかったっけ。
それ、db_owner
ですかね。
というように、dbo
ユーザーは、よく db_owner
ロールと混同されます。
※ db_owner
ロールのメンバーであるからといって、dbo
のユーザー権限があるとは限りません。
スキーマとしてのdbo
組み込みスキーマ
SQL Server には、組み込みのデータベース ユーザーおよびロールと同じ名前を持った 10 個の定義済みスキーマが付属しています。 これらは主に下位互換性を確保するために存在します。 固定データベース ロールと同じ名前のスキーマは、不要であれば削除してもかまいません。 次のスキーマを削除することはできません。
dbo
guest
sys
INFORMATION_SCHEMA
これらを model データベースから削除した場合、新しいデータベースにはこれらのスキーマが存在しなくなります。
dbo スキーマ
dbo
スキーマは、新しく作成されたデータベースに使用される既定のスキーマです。 dbo
スキーマは、dbo
ユーザー アカウントによって所有されます。 既定では、Transact-SQL コマンド CREATE USER で作成されたユーザーには、dbo
が既定のスキーマとして割り当てられます。
dbo
スキーマが割り当てられたユーザーは、dbo
ユーザー アカウントの権限を継承しません。 スキーマの権限はユーザーによって継承されるのではなく、そのスキーマに含まれたデータベース オブジェクトによって継承されます。
注意
1 部構成の名前を使用してデータベース オブジェクトを参照すると、まずユーザーの既定のスキーマが検索されます。 そこで目的のオブジェクトが見つからなかった場合は、dbo
スキーマ内が検索されます。 dbo
スキーマ内にオブジェクトが見つからなかった場合は、エラーが返されます。