doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

SQLServerのdboについて

スポンサーリンク

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 スキーマ内にオブジェクトが見つからなかった場合は、エラーが返されます。