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