dbo по умолчанию для запросов

#sql-server

#sql-сервер

Вопрос:

Есть ли какой-либо способ установить dbo по умолчанию для пользователя (или ODBC-соединения)?

Пример:

 SELECT * FROM [DBO].[SCHEMA].[TABLE]
  

Пользователь также может запросить этот запрос и получит те же результаты:

 SELECT * FROM [SCHEMA].[TABLE]
  

Для этого случая существуют другие базы данных (НАПРИМЕР, [DBO1], [DBO2] и т.д.), Но все (или конкретные пользователи) будут по умолчанию запрашивать [DBO]. Также без использования инструкции USE [].

Комментарии:

1. У вас действительно есть база данных с именем dbo ? Но да, вы можете установить базу данных по умолчанию для LOGIN , если это то, что вы спрашиваете. Однако это значение по умолчанию используется только в том случае, если база данных не определена в строке подключения.

2. В общем, ваше соединение должно определять базу данных, которую следует использовать для всех ссылок на объекты. Это одна из причин, по которой в вашем коде tsql обычно следует избегать использования имен 3 частей (т. Е. database,schema.table). Вы можете установить базу данных по умолчанию для каждого входа, что сделает эту базу данных текущей при установлении соединения без указания базы данных. Но в целом ваш код должен устанавливать соединение с определенной базой данных.

3. @Larnu Нет, у меня нет базы данных с именем dbo, это было просто для примера. Таким образом, я могу установить базу данных по умолчанию для входа в систему и при этом иметь возможность запрашивать из другой существующей базы данных?

4. У каждого LOGIN есть база данных по умолчанию, @Dense04, просто если вы ее не определите, она будет master . Вы по-прежнему можете запрашивать другие базы данных, при условии, что у вас есть сопоставленная база данных USER с соответствующими разрешениями; либо подключившись напрямую к этой базе данных в строке подключения, используя USE инструкцию для изменения контекста базы данных, либо используя 3 части именования для объекта (ов).

5. @SMor Я считаю, что это невозможно для нашей текущей настройки. Что мы имеем прямо сейчас, так это то, что на одном сервере у нас есть 3 базы данных, которыми мы управляли: DB1, DB2, DB3. DB1 содержит метаданные и сохраненные процедуры, которые мы используем в других базах данных. DB1 используется как для хранения, так и для конфигураций, в то время как остальные базы данных предназначены только для хранения.

Ответ №1:

Да, можно настроить базу данных по умолчанию для входа в систему. По умолчанию установлено значение master, но вы можете изменить его, выполнив:

ИЗМЕНИТЕ ЛОГИН [LOGIN_NAME] На DEFAULT_DATABASE = [DEFAULT_DATABASE_NAME];

Вы можете проверить текущие настройки базы данных по умолчанию для каждого входа в систему, используя этот оператор:

ВЫБЕРИТЕ loginname, dbname ИЗ sys.syslogins

Комментарии:

1. У меня есть похожая база данных, которая делает то, что я хочу. Я проверил его свойства, и все логины по умолчанию имеют значение [dbo]. На другом сервере, над которым я работаю, имеют те же свойства, но ведут себя не так, как первый. Что я сделал на своем рабочем сервере, так это (1) вручную создал нужные мне базы данных. (2) Импортировал мета-таблицы с рабочего сервера. (3) Обновлены пользователь / роли. При этом я все еще не могу воспроизвести поведение рабочего сервера.