SQL Server 2005/2008 - Почему представление sys.sysobjects доступно пользователям без имени схемы? - PullRequest
2 голосов
/ 16 августа 2010

Я заметил странное поведение в SQL Server Express 2008, и я пытался выяснить причину.При создании новой базы данных вы можете получить доступ к представлению sys.sysobjects без указания идентификатора схемы следующим образом:

SELECT * FROM [sysobjects]

Вы можете сделать это, даже если ваша схема по умолчанию отличается от'SYS'.Насколько я понимаю, схемы заключаются в том, что ядро ​​базы данных сначала будет искать объект в схеме по умолчанию, а затем - в схеме dbo, если у пользователя есть разрешение, а затем перестанет искать.Кроме того, я знаю, что к представлению sys.sysobjects можно получить доступ, потому что публичной роли по умолчанию предоставляется разрешение на выбор.Я просто не знаю, почему к нему можно получить доступ без имени схемы.

Продолжает ли движок искать объект после проверки схемы 'dbo', является ли представление sysobjects особым случаем, или это что-тоеще целиком?

Ответы [ 2 ]

1 голос
/ 16 августа 2010

Это особый случай. Это представления обратной совместимости.

В SQL 2000 не было необходимости использовать схему sys, поэтому они сделали так, чтобы существующий код все еще работал для этих объектов.

Все они были заменены новыми системными представлениями и функциями и должны быть удалены для удаления в будущей версии SQL Server, поэтому их следует по возможности избегать (см. Тему " Отображение системных таблиц" к системным представлениям"в BOL для деталей). Хотя есть некоторые обстоятельства , в которых они все еще необходимы.

0 голосов
/ 16 августа 2010

IIRC, SQL Server ищет объекты в следующем порядке:

  1. sys схема
  2. схема пользователя (Это отличается для хранимых процедур - она ​​будет выглядеть не в схеме пользователя, а в схеме заштрихованных процедур.
  3. схема dbo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...