В чем разница между "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
.