В чем разница между "db_owner" и "пользователем, который владеет базой данных" в SQL Server 2000?

Я пытаюсь лучше понять, почему один из наших скриптов обновления базы данных не работал должным образом на определенном сайте клиента и сузил его (я думаю) на владение и роли базы данных.

Отказ от ответственности: Я действительно жду, чтобы услышать ответ от DBA клиента, чтобы они могли сказать нам, обновили ли они свою базу данных SQL в последнее время, и поэтому мы можем посмотреть их базу данных. Я думаю, что преобразование SQL 2000 в SQL 2005 могло бы вызвать наши скрипты, если бы вход в базу данных наших приложений был преобразован в схему, потому что мы ссылались на dbo в нескольких местах в обновлении script.

Во всяком случае, я пытаюсь найти лучшее объяснение владения и ролей базы данных и того, как она влияет на то, какой владелец объекта базы данных фактически назначен, когда вы явно не укажете владельца в инструкции T-SQL. Например, наши сценарии обновления обычно просто CREATE TABLE foo вместо CREATE TABLE dbo.foo или что-то еще, но я нашел несколько, которые явно использовали dbo, и те, которые вызывали проблемы на данный момент (только для этого одного клиента).

Я нашел эту статью (специально для SQL Server 2000), но таблица на этой странице запутанна. Он упоминает db_owner и "владеет базой данных" как две различные возможности для какой роли пользователь может иметь.

Например, в таблице указано, что если пользователь sam, который находится в роли db_owner, запускает запрос CREATE TABLE [test3](abc int), он будет принадлежать sam.

Затем он упоминает, что если другой пользователь sue, который "владеет базой данных" (sic), запускает тот же запрос, он будет принадлежать dbo.

Не было бы db_owner и "владеет базой данных" одинаково? Из таблицы следует, что существует разница между "присутствием в роли db_owner" и фактически "являющейся владельцем базы данных". Но, если это так, правда, что значит "владеть базой данных", если это нечто иное, чем член роли db_owner?

Ответы

Ответ 1

Нет, db_owner и владелец базы данных не совпадают. dbo - пользователь, а db_owner - роль базы данных. Базы данных принадлежат логинам. Независимо от того, какой тип входа в систему принадлежит базе данных, псевдоним находится как dbo внутри базы данных. Вы можете изменить владельца базы данных с помощью хранимой процедуры sp_changedbowner.

Все объекты в базе данных принадлежат пользователю. Пользователям, являющимся членами роли db_owner, среди других разрешений, разрешено создавать объекты, принадлежащие dbo. Если пользователь не является членом db_owner, но имеет некоторые разрешения на создание (например, Create Table), то любые созданные ими объекты будут принадлежать пользователю, который их создал. Вы можете изменить право собственности на объект с помощью хранимой процедуры sp_changeobjectowner.