Не удалось найти объект так как он не существует или отсутствуют разрешения sql
Добрый день, уважаемые.
Дернул меня черт включить поддержку filestream в базе. Теперь задание копирования базы выполняется некорректно. Копия базы создается, но оригинал не поднимается. Из-за того, что имя каталога filestream у них одинаковое
Как быть в этой ситуации? Выключил filestream в sql сервере, но поле "Имя каталога FILESTREAM" в свойствах базы, теперь невозможно удалить.
Задание, которое заканчивается теперь с ошибкой, копирует базу на этот же сервер, но с другим именем базы. Копирование происходит путем отключения базы (первый способ в мастере копирования)
- Изменено SokRus 4 июня 2014 г. 13:20
Ответы
USE [master]
GO
ALTER DATABASE [trade_copy] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF, DIRECTORY_NAME = NULL ) WITH NO_WAIT
GO
- Помечено в качестве ответа SokRus 6 июня 2014 г. 7:39
Все ответы
Ребята, дело срочное 🙂
Ночью снова запуститься задание копирования базы, а утром основной базы не окажется в доступе. Ее придется вручную присоединять, перед этим изменив "Имя каталога FILESTREAM" у копии. Иначе присоединение не выйдет, "Имя каталога FILESTREAM" одинаковое у оригинала и копии 🙁
Как сделать пустым поле "Имя каталога FILESTREAM" в свойствах базы? Собственно, как и было до включения filestream
Не удается найти объект, так как он не существует или у вас нет разрешений, ошибка в SQL Server
У меня есть база данных и сценарий sql для добавления некоторых полей в таблицу под названием «Продукты» базы данных.
Но когда я выполняю этот скрипт, я получаю следующую ошибку:
Почему произошла ошибка и что я должен сделать, чтобы устранить ее?
15 ответов
Вы уверены, что выполняете сценарий для правильной базы данных? В SQL Server Management studio вы можете изменить базу данных, к которой вы выполняете запрос, в раскрывающемся списке на одной из панелей инструментов, или вы можете запустить свой запрос с помощью этого:
Я нашел причину, почему это произойдет. У пользователя были соответствующие разрешения, но хранимая процедура включала инструкцию TRUNCATE:
Поскольку TRUNCATE удаляет элементы без регистрации, вам (очевидно) необходимы повышенные разрешения для выполнения хранимой процедуры, которая ее содержит. Мы изменили заявление на:
УДАЛИТЬ ИЗ TableName
Это также может произойти из-за опечатки в ссылке на таблицу, такую как [dbo.Product] вместо [dbo].[Product] ,
Видит ли пользователь, под которым вы выполняете этот скрипт, даже эту таблицу?
Вы получаете какой-либо выход для этого?
Если да: имеет ли этот пользователь право изменять таблицу, т.е. выполнять сценарии DDL, такие как ALTER TABLE так далее.? Как правило, обычные пользователи не имеют таких повышенных разрешений.
Найдите в скрипте любую операцию DDL. Возможно, у пользователя нет прав на запуск изменений.
В моем случае это было SET IDENTITY_INSERT tblTableName ON
Вы можете добавить db_ddladmin для всей базы данных или только для таблицы, чтобы решить эту проблему (или изменить сценарий)
Также возможно, что вы создали «Продукты» в своей схеме входа в систему и пытались выполнить то же самое в другой схеме (возможно, dbo)
Шаги, чтобы решить эту проблему
1) открыть студию управления 2) найти объект в проводнике и определить схему, под которой находится ваш объект? (это текст перед именем вашего объекта). На изображении ниже его «dbo» и мое имя объекта является статусом действия

если вы видите его как «yourcompanydoamin\yourloginid», то вам следует изменить разрешение для этой конкретной схемы, а не для любой другой схемы.
Вы можете щелкнуть правой кнопкой мыши по процедуре, выбрать свойства и посмотреть, какие разрешения предоставляются вашему логину. Затем вы можете вручную отметить «Выполнить» и изменить разрешение для процедуры.
Или написать это:
Это может быть проблема с разрешением. Пользователю необходимо как минимум разрешение ALTER для усечения таблицы. Другой вариант — вызвать DELETE FROM вместо TRUNCATE TABLE, но эта операция медленнее, потому что она записывает в файл журнала, тогда как TRUNCATE не записывает в файл журнала.
Минимальное необходимое разрешение — ALTER для table_name. Разрешения TRUNCATE TABLE по умолчанию принадлежат владельцу таблицы, членам фиксированной роли сервера sysadmin и фиксированным ролям базы данных db_owner и db_ddladmin и не подлежат передаче. Однако вы можете включить оператор TRUNCATE TABLE в модуль, например в хранимую процедуру, и предоставить ему соответствующие разрешения с помощью предложения EXECUTE AS.
Я пытался скопировать таблицу из PROD в DEV, но получил ошибку: «Не удается найти объект X, потому что он не существует или у вас нет прав».
Однако таблица существовала, и я работал как sa, поэтому у меня были разрешения.
Проблема была на самом деле с ОГРАНИЧЕНИЯМИ. Я переименовал таблицу на DEV в old_XXX несколько месяцев назад. Но когда я попытался скопировать оригинал из PROD, имена ограничений Defaut столкнулись.
Сообщение об ошибке вводило в заблуждение
Делюсь своим делом, надеюсь, это поможет.
В моей ситуации внутри MY_PROJ.Database->MY_PROJ.Database.sqlproj Я должен был поставить это:
В моем случае я работал под другим пользователем, чем тот, которого я ожидал.
я имел ‘DRIVER=
Я решил не углубляться в это дальше, так как переход на этот лучший способ подключения устраняет проблему:
В моем случае версия sql-сервера на моем локальном хосте выше, чем на производственном сервере, и поэтому в сгенерированный скрипт с локального хоста были добавлены некоторые новые переменные. Это в первую очередь вызывало ошибки при создании таблицы. Поскольку создание таблицы не удалось, последующий запрос к таблице «НЕ СУЩЕСТВУЕТ» также не удался. К счастью, среди длинного списка ошибок sql я обнаружил, что это «OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF» является новой переменной в сценарии, вызывающей мою проблему. Я сделал поиск и замену, и ошибка исчезла. Надеюсь, это кому-то поможет.
Оператор TRUNCATE был моей первой проблемой, и я был рад найти здесь решение. Но я использовал SSIS и пытался загрузить данные из другой базы данных, и это не удалось с той же ошибкой в любой таблице, которая использовала IDENTITY для создания автоматически увеличивающегося идентификатора. Если бы я сам писал сценарий, мне сначала нужно было бы использовать команду SET IDENTITY_INSERT tablename ON, а затем SET IDENTITY_INSERT tablename OFF, когда было выполнено обновление таблицы. Но для этого требуются разрешения ALTER для таблицы, которых у меня нет. Следовательно, сообщение об ошибке в SSIS при загрузке таблицы (хотя на предыдущем шаге только что были удалены все данные из таблицы).
Вы получаете эту ошибку, когда используете ORM, например GORM (https://gorm.io/ ) в Go, например.
Когда вы пытаетесь создать структуру и случайно передаете идентификатор (первичный ключ), хотя он вставляется автоматически.
Богатые возможности IDE, такие как Visual Studio Code, позволяют легко допустить эту ошибку:
Вы по-прежнему можете использовать автозаполнение с помощью кода Visual Studio, но удалите свою запись для первичных ключей вашей модели:
Не удается найти объект, поскольку он не существует или у вас нет разрешений, ошибка в SQL Server
У меня есть база данных и есть SQL-скрипт для добавления некоторых полей в таблицу под названием «Продукты» базы данных.
но когда я выполняю этот скрипт, я получаю следующую ошибку:
почему произошла ошибка и что я должен сделать, чтобы ее разрешить?
9 ответов
вы уверены, что выполняете скрипт против правильной базы данных? В среде SQL Server Management studio можно изменить базу данных, к которой выполняется запрос, в раскрывающемся списке на одной из панелей инструментов или запустить запрос следующим образом:
Я нашел причину, почему это будет происходить. Пользователь имел соответствующие разрешения, но хранимая процедура включала оператор усечения:
усечь имя таблицы
поскольку TRUNCATE удаляет элементы без регистрации, вам (по-видимому) нужны повышенные разрешения для выполнения хранимой процедуры, содержащей его. Мы изменили утверждение на:
удалить из TableName
. и ошибка исчезла!
пользователь, который вы выполняете этот скрипт, даже видит эту таблицу??
вы получаете какой-либо выход для этого??
Если да: имеет ли этот пользователь разрешение на изменение таблицы, т. е. выполнение сценариев DDL, таких как ALTER TABLE etc.? Как правило, у обычных пользователей нет таких повышенных разрешений.
Это также может произойти из-за опечатки при ссылке на таблицу, такую как [dbo.Product] вместо [dbo].[Product] .
также возможно, что вы создали «продукты» в своей схеме входа в систему, и вы пытались выполнить то же самое в другой схеме (возможно, dbo)
шаги для решения этой проблемы
1) Откройте студию управления 2) найдите объект в проводнике и определите схему, в которой находится ваш объект? ( это текст перед именем объекта ). На изображении ниже его «dbo» и мое имя объекта-действие статус

Если вы видите его как «yourcompanydoamin\yourloginid», то вы должны вы можете изменить разрешение на эту конкретную схему, а не любую другую схему.
вы можете щелкнуть правой кнопкой мыши процедуру, выбрать Свойства и посмотреть, какие разрешения предоставляются вашему идентификатору входа. Затем вы можете вручную проверить» выполнить » и изменить разрешение для proc.
или написать это было бы:
в моем случае я работал под другим пользователем, чем тот, которого я ожидал.
Я ‘DRIVER=
я решил не копаться в этом дальше, после перехода на этот способ подключение Исправлена ошибка:
Я пытался скопировать таблицу из PROD в DEV, но получил ошибку: «Не удается найти объект X, потому что она не существует или у вас нет разрешения.»
однако таблица существовала, и я работал как sa, поэтому у меня были разрешения.
проблема была на самом деле с контрацептивами. Я переименовал таблицу на DEV в old_XXX несколько месяцев назад. Но когда я попытался скопировать оригинал из PROD, имена ограничений Defaut столкнулись.
Не удается найти объект, потому что он не существует или у вас нет разрешений. Ошибка в SQL Server
У меня есть база данных и сценарий Sql для добавления некоторых полей в таблицу под названием «Продукты» в базе данных.
Но когда я выполняю этот сценарий, я получаю следующую ошибку:
Почему возникает ошибка и что мне делать для ее устранения?
задан 16 июля ’09, 07:07
который sql скрипт ? — Kiquenet
Это может быть связано с разрешениями. Является ли пользователь участником роли db_owner? — Tarzan
Я нашел ответ на свой случай в другая строка — Circle Hsiao
13 ответы
Вы уверены, что выполняете сценарий для правильной базы данных? В SQL Server Management studio вы можете изменить базу данных, к которой вы выполняете запрос, в раскрывающемся списке на одной из панелей инструментов, или вы можете начать свой запрос следующим образом:
Создан 16 июля ’09, 11:07
Я нашел причину, по которой это могло произойти. У пользователя были соответствующие разрешения, но хранимая процедура включала TRUNCATE заявление:
С TRUNCATE удаляет элементы без регистрации, вам (по-видимому) нужны повышенные разрешения для выполнения хранимой процедуры, которая его содержит. Мы изменили заявление на:
. и ошибка исчезла!
Создан 08 июля ’19, 14:07
Оператор усечения тоже был проблемой для меня. Это исправлено добавлением соответствующих разрешений для усечения. — Эндрю
Это должно быть зарегистрировано как ошибка сервера sql. Сообщение об ошибке: «Не удается найти объект x . », но проблема связана с разрешениями объекта, отличного от x. Нет, сообщение об ошибке не «Не удается найти объект x, потому что он не существует. Или у вас нет прав». Хотя это несуществующее сообщение об ошибке может дать немного больше подсказки, оно все же не так полезно, как сообщение об ошибке, указывающее на правильный объект с проблемой разрешения. — Сэм
Это была именно моя проблема — он отлично работал с моим локальным пользователем, но не использовал сервисную учетную запись в производственной среде — спасибо! — Гарпуний
Исправлена и моя непонятная проблема! БЛАГОДАРНОСТЬ! — Барри Сеймур
Это также может произойти из-за опечатки при ссылке на таблицу, например [dbo.Product] вместо [dbo].[Product] .
ответ дан 16 дек ’15, 11:12

Видит ли пользователь, под которым вы выполняете этот скрипт, эту таблицу?
Есть ли у вас какие-нибудь результаты?
Если да: есть ли у этого пользователя разрешение на изменение таблицы, т.е. выполнение сценариев DDL, например ALTER TABLE так далее.? Как правило, обычные пользователи не имеют таких повышенных разрешений.
ответ дан 17 окт ’17, 15:10
Также возможно, что вы создали «Продукты» в своей схеме входа в систему и пытались выполнить то же самое в другой схеме (возможно, dbo).
Действия по устранению этой проблемы
1) откройте студию управления 2) Найдите объект в проводнике и определите схему, в которой находится ваш объект? (это текст перед названием вашего объекта). На изображении ниже это «dbo», а имя моего объекта — статус действия.

если вы видите его как «yourcompanydoamin \ yourloginid», тогда вы можете изменить разрешение для этой конкретной схемы, а не для какой-либо другой схемы.
ответ дан 04 дек ’15, 10:12
Вы можете щелкнуть процедуру правой кнопкой мыши, выбрать свойства и посмотреть, какие разрешения предоставлены вашему идентификатору входа. Затем вы можете вручную установить флажок «Выполнить» и изменить разрешение для процедуры.
Или, чтобы написать сценарий, это было бы так:
ответ дан 17 окт ’17, 12:10
Процедура выполняется . проблема в доступе к таблице, а не в самой процедуре. — Джеймс Ньютон
Найдите в скрипте любую операцию DDL. Возможно, у пользователя нет прав на запуск изменений.
В моем случае это было SET IDENTITY_INSERT tblTableName ON
Вы можете добавить db_ddladmin для всей базы данных или только для таблицы, чтобы решить эту проблему (или изменить сценарий)
Создан 14 июля ’20, 11:07

Я пытался скопировать таблицу из PROD в DEV, но получаю сообщение об ошибке: «Не могу найти объект X, потому что он не существует или у вас нет разрешений».
Однако таблица действительно существовала, и я работал как sa, поэтому у меня были разрешения.
На самом деле проблема заключалась в ПРОТИВОПОКАЗАНИЯХ. Я переименовал таблицу на DEV в old_XXX месяцев назад. Но когда я попытался скопировать оригинал из PROD, имена ограничений Defaut столкнулись.
Сообщение об ошибке вводило в заблуждение
Создан 03 июля ’17, 00:07

Вам следует добавить воспроизводимый код, чтобы ваш ответ был легким для понимания. — М. Касим
Извините, я использую только графический интерфейс SSIS. Есть ли способ передать это без кучи скриншотов? — Джон Хантер
Это может быть проблема с разрешением. Для усечения таблицы пользователю требуется как минимум разрешение ALTER. Другой вариант — вызвать DELETE FROM вместо TRUNCATE TABLE, но эта операция медленнее, потому что она записывает в файл журнала, тогда как TRUNCATE не записывает в файл журнала.
Минимальное необходимое разрешение — ALTER для table_name. Разрешения TRUNCATE TABLE по умолчанию принадлежат владельцу таблицы, членам фиксированной роли сервера sysadmin и фиксированным ролям базы данных db_owner и db_ddladmin и не подлежат передаче. Однако вы можете включить оператор TRUNCATE TABLE в модуль, например хранимую процедуру, и предоставить ему соответствующие разрешения с помощью предложения EXECUTE AS.

В моем случае я работал под другим пользователем, чем тот, которого я ожидал.
У меня было ‘DRIVER=
Я решил не вдаваться в подробности, поскольку переход на этот лучший способ подключения устранил проблему:
ответ дан 10 апр.
Поделившись моим случаем, надеюсь, что это поможет.
В моей ситуации внутри MY_PROJ.Database->MY_PROJ.Database.sqlproj Пришлось поставить это:

В моем случае версия sql-сервера на моем локальном хосте выше, чем на производственном сервере, и, следовательно, в сгенерированный скрипт с локального хоста были добавлены некоторые новые переменные. Это в первую очередь вызывало ошибки при создании таблицы. Поскольку создание таблицы не удалось, последующий запрос к таблице «НЕ СУЩЕСТВУЕТ» также не удался. К счастью, среди длинного списка ошибок sql я обнаружил, что это «OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF» является новой переменной в сценарии, вызывающей мою проблему. Я выполнил поиск и замену, и ошибка исчезла. Надеюсь, это кому-то поможет.
ответ дан 01 мая ’20, 20:05

Оператор TRUNCATE был моей первой проблемой, и я был рад найти здесь решение. Но я использовал SSIS и пытался загрузить данные из другой базы данных, и это не удалось с той же ошибкой в любой таблице, которая использовала IDENTITY для создания автоматически увеличивающегося идентификатора. Если бы я сам писал сценарий, мне сначала нужно было бы использовать команду УСТАНОВИТЬ IDENTITY_INSERT имя таблицы ON, а затем УСТАНОВИТЬ IDENTITY_INSERT имя таблицы OFF когда было выполнено обновление таблицы. Но для этого требуются разрешения ALTER для таблицы, которых у меня нет. Следовательно, сообщение об ошибке в SSIS при загрузке таблицы (хотя на предыдущем шаге только что были удалены все данные из таблицы).
ответ дан 01 окт ’20, 03:10
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками sql-server or задайте свой вопрос.