Я пытаюсь лучше понять, почему один из наших скриптов обновления базы данных не работал должным образом на определенном сайте клиента и сузил его (я думаю) на владение и роли базы данных.
Отказ от ответственности: Я действительно жду, чтобы услышать ответ от 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
?